那么到底什么是主動(dòng)對(duì)象呢?傳統(tǒng)上,所有的對(duì)象都是被動(dòng)的代碼段,對(duì)象中的代碼是在對(duì)它發(fā)出方法調(diào)用的線程中執(zhí)行的。也就是,調(diào)用線程(
calling threads)被“借出”,以執(zhí)行被動(dòng)對(duì)象的方法。而主動(dòng)對(duì)象卻不一樣。這些對(duì)象持有它們自己的線程(甚或多個(gè)線程),并將這個(gè)線程用于執(zhí)行對(duì)它們的任何方法的調(diào)用。因而,如果你想象一個(gè)傳統(tǒng)對(duì)象,在里面封裝了一個(gè)線程(或多個(gè)線程),你就得到了一個(gè)主動(dòng)對(duì)象。
例如,設(shè)想對(duì)象
“A”已在你的程序的main()函數(shù)中被實(shí)例化。當(dāng)你的程序啟動(dòng)時(shí),OS創(chuàng)建一個(gè)線程,以從main()函數(shù)開(kāi)始執(zhí)行。如果你調(diào)用對(duì)象A的任何方法,該線程將“流過(guò)”那個(gè)方法,并執(zhí)行其中的代碼。一旦執(zhí)行完成,該線程返回調(diào)用該方法的點(diǎn)并繼續(xù)它的執(zhí)行。但是,如果”A”是主動(dòng)對(duì)象,事情就不是這樣了。在這種情況下,主線程不會(huì)被主動(dòng)對(duì)象借用。相反,當(dāng)”A”的方法被調(diào)用時(shí),方法的執(zhí)行發(fā)生在主動(dòng)對(duì)象持有的線程中。另一種思考方法:如果調(diào)用的是被動(dòng)對(duì)象的方法(常規(guī)對(duì)象),調(diào)用會(huì)阻塞(同步的);而另一方面,如果調(diào)用的是主動(dòng)對(duì)象的方法,調(diào)用不會(huì)阻塞(異步的)。