Это ответ на ваше последнее редактирование о том, как вы можете его протестировать.Это также касается комментария Hot Licks.На практике вы не можете реально протестировать безопасность потоков, так как она сильно недетерминирована и сбои обычно происходят в течение длительных периодов времени.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.То, что 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
Примечание. Я использовал, вероятно, потому, что вы можете запускать этот тест несколько раз и не переходить в бесконечный цикл, но я выполнил этот тест и могу легко запустить цикл