2012-04-20 102 views
0

執行對象方法的線程是否取決於創建它的線程上的線程?Java多線程:執行對象方法的線程是否依賴於創建它的線程上的線程?

想象一下,你在你的Java應用程序線程1和線程和兩個類ClassA和ClassB的兩個線程。

您在Thread1上創建ObjectOfClassA,然後在Thread2上創建ObjectOfClassB,ObjectOfClassB包含對ObjectOfClassA的引用。當ObjectOfClassB運行一個ObjectOfClassA方法時,該方法將在哪個線程上執行?

在你回答,請提供一個鏈接到相關的文檔。

根據我見過,我得到這個意義上,一個對象方法的執行是完全垂直於其所創建的線程,但我不知道。

回答

2

您創建線程1的ObjectOfClassA然後創建和ObjectOfClassB在線程2中,ObjectOfClassB包含對ObjectOfClassA參考。當ObjectOfClassB運行一個ObjectOfClassA方法時,該方法將在哪個線程上執行?

在其中運行ObjectOfClassB本身的調用方法在同一線程(這將是線程2我想......但作爲@Andrzej指出的,也可以是另一個,第三線太)。這完全獨立於哪個線程創建了哪個對象。重要的是給定的對象是否是公佈的(即變得可用)給定的線程。如果是,它可以由該線程運行。

+0

......,當然,如果你有一個完全獨立的第三方線程調用'b.foo(一)',該方法將在第三線程中執行。 – 2012-04-20 09:29:43

+0

@AndrzejDoyle,的確,謝謝。我進一步解釋了這一點。 – 2012-04-20 09:32:50

+0

在java中「發佈」對象與持有對對象的引用相同嗎?我從未聽過這個詞。 – tjb 2012-04-20 09:54:33

7

有作爲自動線程切換沒有這樣的事情,所以每個方法調用發生在「當前線程」上無論對象被創建的線程上。