2012-10-03 60 views
0

我的情況是我有兩個線程。第一個線程產生第二個線程無法訪問的許多對象,直到所有這些對象都被創建。之後,第二個線程讀取這些對象中的字段,但與第一個線程同時進行。此時沒有線程正在改變對象字段的值。 對象不同步。我應該同步它們嗎?我應該從多個線程訪問(不更改)一個對象嗎?

+0

您可以有任意數量的線程讀取相同的數據,而無需線程安全問題。 –

+0

@BheshGurung頁面未找到。最後刪除一些文本 – keyser

回答

4

我推薦的是使用AtomicReference<Collection<SomeObject>>。第一個線程將生成對象集合並執行reference.put(collection)。第二個線程只能在AtomicReference上設置對象後才能看到對象(reference.get())。這裏是javadocs for AtomicReference。您還可以將對象設置爲數組或任何類型的集合,例如List

如果認識到在設置AtomicReference上的集合(或數組)之後很重要,則無法對集合進行任何更改。你不能添加額外的項目,清除它等等。如果你想真正的併發訪問一組對象,那麼你應該看看ConcurrentHashMap和朋友。

我應該同步嗎?

如果對象不打算在所有後,他們被放置在您的收藏中發生突變,那麼你做需要讓他們同步。

1

從多個線程同時讀取數據沒有任何問題。當您嘗試修改該數據時會出現問題。只要對象完全初始化並且值是第二個線程接收到實際值(緩存等沒有問題),那麼從多個線程同時讀取數據沒有問題。

相關問題