多线程公寓的目的是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程公寓的目的是什么?相关的知识,希望对你有一定的参考价值。

我理解STA背后的原因,但没有真正看到MTA的原因。

可以在没有任何公寓的情况下加载COM对象,对吗?这意味着它已经能够异步进行调用,因为没有人提出任何约束。

我哪里错了?

答案

首先,您的假设是错误的:无法在任何公寓外创建COM对象。通常,线程应该只创建COM对象,如果它先前已调用CoInitialize或CoInitializeEx,它将它放在公寓中。否则,创建通常会失败。隐式多线程单元的边缘情况(如果同一进程的另一个线程初始化它),但即便如此,您将进入MTA,只是以不可靠且难以调试的方式。没有在公寓里就没有COM对象。

你想要一个MTA的原因是它不一定是唯一的公寓。一个进程可以有一个MTA和任意多个STA。 MTA和任何STA之间的呼叫仍然需要进行封送;如果不是,其中一个MTA线程可以以不安全的方式调用STA线程。

事实上,至少有一个STA是规则而不是例外:用户界面想要存在于STA中,因为它依赖于消息(例如,由于鼠标点击等)按顺序处理。

以上是关于多线程公寓的目的是什么?的主要内容,如果未能解决你的问题,请参考以下文章

老说多线程工作,咋没人说多线程玩耍?

什么是JAVA的多线程?

什么是Java多线程编程?

Java 多线程与并发:前置知识

Delphi 多线程问题

多线程教程初级教程--创建多线程的方法