2
A
回答
7
1
線程安全的數組會是什麼樣子?您不能添加或移除數組的元素。你所能做的就是給每個成員分配值。
假設你的代碼有
int x = a[2];
a[3] = x;
那是線程安全的? (提示:可能不是,取決於你想要[2]和[3]的一致性)。
一般來說:從顯着的線程安全開始。把同步放在 - 它並不昂貴。真的想想你的意思。測試它並解決僵局 - 如果你有這樣的問題,你可能沒有想到你正在努力做的事情。只有當你的性能測試真的證明這是你的瓶頸開始變得聰明。
1
Java內存模型將每個數組元素視爲一個單獨的變量。就像任何其他變量一樣,您可能對這樣的變量有線程不安全的操作。
該數組本身是相當線程安全的。
static Object[] a;
// thread 1
a = new Object[10];
// thread 2
read a.length // ok
read a[0] // ok
a[0] = something // ok
有什麼大不了的?如果您使用ArrayList例如,這種行爲是不是安全沒有適當的同步
static ArrayList a;
// thread 1
a = new ArrayList(another_collection_with_10_null);
// thread 2
a.size(); // unsafe
a.get(0); // unsafe
a.set(0, something); // unsafe
您可能會得到不正確的結果,甚至unsensible結果,或例外。你可能會搞砸列表並使其永久無法使用。
相關問題
- 1. java線程安全:線程安全嗎?
- 2. 線程安全訪問數組和線程安全訪問
- 3. Java線程安全的Sqlite?
- 4. Java線程安全遞歸
- 5. 的Java JDBC線程安全
- 6. Java方法線程安全
- 7. 多線程安全在Java
- 8. Java:線程安全的RandomAccessFile
- 9. Java - jxls - XLSTransformer線程安全
- 10. Java InputStream/XSL線程安全
- 11. java單線程安全
- 12. Java XPathFactory線程安全
- 13. Java線程getId()線程安全嗎?
- 14. 部分線程安全是否使Java類線程安全?
- 15. Java線程安全計數器
- 16. Java線程安全數據庫連接
- 17. D中數組的線程安全性?
- 18. C#數組是否線程安全?
- 19. 數組中的線程安全容器
- 20. 線程安全
- 21. 線程安全
- 22. 線程安全
- 23. 線程安全
- 24. 線程安全
- 25. 線程安全
- 26. 線程安全
- 27. 線程安全
- 28. 線程安全
- 29. 線程安全
- 30. C++線程安全整數
它應該與各種讀寫鎖定同步,因爲讀取可以同時進行。如果它使用排他鎖,那麼我不喜歡'Vector' :) – Andrey 2010-09-17 17:51:44
@Andrey:嗯,這正是它所做的。 Vector'完全同步。 (這實際上並沒有使它正確地線程安全......只是每一個單獨的操作。) – 2010-09-17 18:05:23
@ohhh是ArrayList不是線程安全的,但多線程訪問數組的方式是什麼?它在內部是同步的,還是我們必須同步外部訪問? – userv 2010-09-19 08:56:38