簡體   English   中英

java 單寫多讀

[英]java single writer and multiple reader

抱歉,如果之前有人問過這個問題,但我找不到我的確切場景。

目前我有一個后台線程,它向列表中添加一個元素並每隔幾分鍾刪除一次舊數據。 理論上,列表中一次最多可以有 2 個項目,並且這些項目是不可變的。 我還有多個線程,它們會在需要時獲取列表中的第一個元素。 在這種情況下,是否有必要顯式地序列化列表上的操作? 我的假設是,由於我只是獲取對元素的引用,如果后台線程從列表中刪除元素,那應該無關緊要,因為線程在刪除之前已經獲取了引用的副本。 可能有更好的方法來做到這一點。 先謝謝了。

是的,這里還是需要同步,因為添加和刪除不是原子操作。 如果一個線程調用add(0, new Object())同時另一個線程調用remove(0) ,結果是未定義的; 例如, remove()可能最終無效。

根據您的使用情況,您可以使用非阻塞列表 class ,例如ConcurrentLinkedQueue 但是,鑒於您每隔幾分鍾就推送一項更改,我懷疑您是否通過避免同步而獲得了很多性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM