2013-07-13 50 views
2

如果我創建了兩個運行到Java中兩個不同線程的對象。如果其中一個對象在另一個對象中調用一個方法。方法是運行在調用方法的對象的線程還是運行方法的對象的線程中?哪個線程負責Java中的內容

+2

如果一個線程上的代碼調用另一個線程也可訪問的對象的方法,則必須開始考慮線程安全性。 – Thilo

+0

擁有「對象是狀態加行爲」(鬆散地說,對象是數據加上對其進行操作的代碼)的觀點是正確的。然而,當一個對象被創建時,理解它實際上只是分配到堆上的對象的狀態(例如實例字段等)。該對象的代碼庫由該類的所有對象(即使是非靜態代碼)「共享」。無論如何,這正是你想要的。併發問題幾乎總是由對象狀態的交錯訪問引起的,並且幾乎不會由交錯訪問代碼引起。 – scottb

回答

6

該方法在調用它的線程中運行。

類或對象不在線程中運行,而是代碼執行。所以重要的是調用對象方法的哪個線程。

正如Thilo所說:類和對象根本不運行。

+3

類不運行(根本)。 – Thilo

+0

@Thilo:確切地說,但這是OP暗示應該發生的事情。 –

1

除非一個線程被顯式啓動,或者被調用的方法在另一個線程(例如Swing Worker)中運行任務,否則它是同一個線程。

在任何情況下,啓動新線程的代碼都在當前線程中運行並指示JVM啓動一個線程。

每個線程都是一個獨立的執行行,與類或對象無關(除了多線程嘗試訪問同一個對象;我們在那裏鎖定),並且可以在其生命週期中訪問許多類和對象。

相關問題