簡體   English   中英

如何測試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.

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