我想要一個通用的線程安全集合,並且我看到Arraylist可以很容易地通過其靜態Synchronized方法使用線程安全,但是我錯誤的是這個ArrayList不是通用的,所以當我想要使用我的對象時,我總是有投它們。有沒有更簡單的方法來做到這一點?其他列表類型也是可能的。線程安全和通用數組列表?
1
A
回答
3
一知半解是件危險的事;-)是的,你可以使用元騎士的建議,並使用SyncRoot
,但你必須要小心 - 它不是萬能的。請參閱Microsoft的BCL團隊博客中的this post,以瞭解爲什麼它不像SyncRoot
那麼簡單。從該職位行情:
我們的一些通用 集合精明的用戶發現,我們不再 上
ICollection<T>
和
提供公共
SyncRoot
財產,我認爲我們'強迫 人更好地認爲 同步,坦率地說SyncRoot
我們的通用 集合上的屬性不提供任何價值。
當然,這並不是說它不能在任何情況下使用 - 您只需仔細考慮使用案例,而不是在自動駕駛中使用。
3
如果關於同步的方法在MSDN上閱讀仍然是這樣說:
「通過集合枚舉是本質上不是一個線程安全的過程即使一個集合已同步,其他線程仍可以修改該集合。 ,這會導致枚舉器拋出一個異常,爲了確保枚舉過程中的線程安全,您可以在整個枚舉過程中鎖定集合,或者捕獲其他線程所做更改導致的異常。
3
您可以創建一個List(T)包裝並與SyncRoot屬性同步訪問。
MSDN例如:
ICollection ic = ...;
lock (ic.SyncRoot)
{
// Access the collection.
}
相關問題
- 1. 線程安全訪問數組和線程安全訪問
- 2. 列表線程安全嗎?
- 3. VB.NET線程安全列表?
- 4. 線程安全,列表,綁定和WPF
- 5. java數組線程安全
- 6. 使用StringCollectionEditor與線程安全列表
- 7. 線程安全java - 收集/列表
- 8. 線程安全標準:列表C++
- 9. 列表<T>線程安全
- 10. 列表複製線程安全嗎?
- 11. Java隊列和線程安全
- 12. Azure Blob和隊列線程安全
- 13. JSON序列化和線程安全
- 14. LinkedList隊列和線程安全
- 15. java列表適用於addAll和clear的線程安全
- 16. D中數組的線程安全性?
- 17. C#數組是否線程安全?
- 18. 數組中的線程安全容器
- 19. 帶線程的線程安全隊列
- 20. 線程安全位陣列?
- 21. 線程安全陣列
- 22. java線程安全:線程安全嗎?
- 23. 線程是否表示線程安全?
- 24. PHP線程安全和非線程安全的Windows
- 25. 休眠和線程安全:注入的SessionFactory線程安全嗎?
- 26. 通用線程安全屬性
- 27. SCSI通用寫入()線程安全嗎?
- 28. OSGI ServiceTracker和線程安全
- 29. SharedPreferences和線程安全
- 30. C++線程安全和notify_all()
是的,我可以包裝ArrayList或許任何其他解決方案? :) – 2009-08-14 14:01:04