2014-04-25 58 views
0

所以我正在深入挖掘對我來說複雜的java。我正在研究多線程,我想知道何時將對象的同一實例發送給兩個不同的線程,然後將該對象的實例分配給兩個線程中的兩個單獨的實例變量。 java是否將這看作是原始對象的同一個實例?這僅適用於線程嗎?Java中的多線程,引用對象

例如:在我的司機

SharedCell share = new SharedCell(); 
Producer p = new Producer(accessCount, share); 
Consumer c = new Consumer(accessCount, share); 

,並在線程:

public Producer(int accesses, SharedCell cell) { 
    super("Producer"); 
    this.accesses = accesses; 
    this.cell = cell; 
} 

public Consumer(int accesses, SharedCell cell) { 
    super("Consumer"); 
    this.accesses = accesses; 
    this.cell = cell; 
} 

其中Producer中運行方法改變在一個變量的值SharedCell對象 和Consumer中的run方法訪問該變量。這些應該是關閉的。

那麼Consumer和Producer中的單元格是否引用驅動程序發送它們的相同對象?

回答

1

對象是java中的引用類型,與大多數語言一樣,這意味着在您的示例中,yes和consumer都指向內存中的同一對象。不,它不僅僅是線程。即使在單線程中,它們也會引用同一個對象。