我的情況是我有兩個線程。第一個線程產生第二個線程無法訪問的許多對象,直到所有這些對象都被創建。之後,第二個線程讀取這些對象中的字段,但與第一個線程同時進行。此時沒有線程正在改變對象字段的值。 對象不同步。我應該同步它們嗎?我應該從多個線程訪問(不更改)一個對象嗎?
0
A
回答
4
我推薦的是使用AtomicReference<Collection<SomeObject>>
。第一個線程將生成對象集合並執行reference.put(collection)
。第二個線程只能在AtomicReference
上設置對象後才能看到對象(reference.get()
)。這裏是javadocs for AtomicReference
。您還可以將對象設置爲數組或任何類型的集合,例如List
。
如果認識到在設置AtomicReference
上的集合(或數組)之後很重要,則無法對集合進行任何更改。你不能添加額外的項目,清除它等等。如果你想真正的併發訪問一組對象,那麼你應該看看ConcurrentHashMap
和朋友。
我應該同步嗎?
如果對象不打算在所有後,他們被放置在您的收藏中發生突變,那麼你做不需要讓他們同步。
1
從多個線程同時讀取數據沒有任何問題。當您嘗試修改該數據時會出現問題。只要對象完全初始化並且值是第二個線程接收到實際值(緩存等沒有問題),那麼從多個線程同時讀取數據沒有問題。
相關問題
- 1. 多線程訪問多個對象
- 2. 共享對象和多線程問題。我應該在乎嗎?
- 3. 訪問從一個線程請求對象一個servlet
- 4. 從另一個線程訪問一個對象
- 5. Java:保護一個對象不被多線程訪問
- 6. 鎖定一個對象被多個線程訪問 - Objective-C
- 7. 確定一個對象是否被多個線程訪問?
- 8. 如何控制多個線程對一組對象的訪問?
- 9. 從另一個進程訪問對象
- 10. 每個應用程序應該只有一個EventSource對象嗎?
- 11. 從另一個訪問一個對象?
- 12. 多個線程可以一次等待一個對象嗎?
- 13. 應該釋放線程對象嗎? C#
- 14. 如何從另一個線程同步UI和訪問對象?
- 15. MonoTouch:另一個線程從處理對象訪問變量
- 16. 從線程訪問一個對象的變量
- 17. 如何從另一個線程訪問UI對象?
- 18. 從Java中的另一個線程訪問/共享對象
- 19. 多個服務層對象應該共享一個DAO嗎?
- 20. 我應該創建多少個線程?
- 21. 我應該多久緩存一個可隨時更改的對象?
- 22. 我應該把一個更大的mysql表分成多個嗎?
- 23. 從多個線程訪問菜單c#
- 24. 從多個線程訪問QTcpSocket
- 25. 被多個線程訪問
- 26. 我應該啓動一個線程來解析一些xml嗎?
- 27. 我可以從我的應用程序訪問另一個應用程序嗎?
- 28. 使用FileSystemWatcher時我應該有多個線程嗎?
- 29. 我可以同時通過同一個DataContext對象訪問多個表嗎?
- 30. WPF線程和GUI如何從不同線程訪問對象?
您可以有任意數量的線程讀取相同的數據,而無需線程安全問題。 –
@BheshGurung頁面未找到。最後刪除一些文本 – keyser