2014-11-22 44 views
1

我正在使用泛型創建對象的ArrayList。每個線程都會計算並將對象存儲在數組列表中。Java ArrayList參考

但是,當查看靜態且易失性的ArrayList時,所有對象屬性均設置爲null。我的想法與垃圾收集器刪除線程中的實例有關,因此一旦線程完成,就沒有對它們的引用。

任何幫助都會很有幫助嗎?

+2

你可以發佈一些示例代碼? – pablochan 2014-11-22 23:32:05

+0

垃圾收集器*永遠不會「消除」變量或以其他方式更改對象。 null值被明確分配或者是默認值。現在,從多個線程使用ArrayList本質上是有問題的 - 至少不使用'synchronized'。 – user2864740 2014-11-22 23:49:09

+0

你的想法是錯誤的。 – 2014-11-23 00:01:14

回答

2

垃圾收集器不會從數組列表中刪除實例。這不是問題。

問題很可能是您正在訪問和更新數組列表對象而沒有進行正確的同步。如果你沒有正確同步,一個線程不會總是看到另一個線程所做的更改。

聲明對ArrayList對象的引用只保證線程將看到相同的列表對象引用。它不保證列表對象上的操作發生了什麼。


1 - 假設該陣列列表是可達當GC運行,那麼已經適當添加到列表中的所有元素也將可達。垃圾回收器將刪除可達到的任何東西。此外,GC將永遠不會涉及到您的應用程序仍可以看到並更改對null的普通引用的對象。