これは、どのようにテストできるかについての最後の編集に対する回答です。これはHot Licksのコメントにも触れる。実際には、スレッドの安全性は非常に非決定論的なので、実際にはテストすることはできません。また、通常は失敗は長期間にわたって発生します。
スレッドセーフでないHashMapを持つnice race conditionがあります。複数のスレッドでHashMapを実行すると、無限ループに陥る可能性があります。この
Executor e = Executors.newFixedThreadPool(5);
public void test(final Map<Object,Object> test){
for(int i =0; i < 5000; i++){
e.submit(new Runnable(){
public void run(){
test.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
のようなコードを実行します。注あなたは無限ループに入り、このテストを複数回実行し、することはできませんので、私はおそらく使用されますが、私はこのテストを行っていると簡単にループが
を発生するために取得することができます
基本的なハッシュテーブルは高速ですが、スレッドがデータを矛盾させて全体を矛盾させる可能性があることは明らかです。 –
信頼Doug Lea :) – Bozho
安全性は決してテストできません。それが存在しないことを証明するだけです。 –