![](/img/trans.png)
[英]How can I perform a thread-safe get then remove with ConcurrentHashMap?
[英]How can I test that ConcurrentHashMap is truly thread-safe?
只是學習更多關於線程和並發性的知識,並考慮使用常規哈希表和ConcurrentHashMap。
測試這些哈希表的並發性的好方法是什么?
(顯然哈希表會通過此測試)
如果我還能以某種方式跟蹤測試執行多少讀/寫以更快地查看哪一個(ht或conccurrent ht),那將會很酷。
這是您上次編輯如何測試它的答案。 這也涉及Hot Licks的評論。 在實踐中,您無法真正測試線程安全性,因為它非常不確定,故障通常會在很長一段時間內發生。
有一個非線程安全的HashMap有一個很好的競爭條件 。 這put
荷蘭國際集團與多線程HashMap的會導致它進入無限循環。 運行與此類似的代碼
ExecutorService e = Executors.newFixedThreadPool(5);
public void test(final Map<Object,Object> map){
for(int i =0; i < 5000; i++){
e.submit(new Runnable(){
public void run(){
map.put(new Object(),new Object());
}
});
}
}
test(new HashMap<Object,Object>()); //will probably go into an infinite loop
test(new ConcurrentHashMap<Object,Object>()); //will *never* go into an infinite loop
注意我之所以使用可能是因為你可以多次運行這個測試而不是進入無限循環,但是我已經完成了這個測試並且很容易讓循環發生
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.