Как я могу проверить, что ConcurrentHashMap действительно поточно-ориентирован? - PullRequest
2 голосов
/ 20 декабря 2011

Просто узнать больше о потоках и параллелизме и подумать об игре с обычной хэш-таблицей и ConcurrentHashMap.

Какой будет хороший способ проверить параллелизм для этих хеш-таблиц?

(очевидно, хеш-таблица не пройдёт этот тест)

Было бы здорово, если бы я мог как-то отслеживать, сколько операций чтения / записи выполняет тест, чтобы увидеть, какая из них (ht или conccurrent ht) быстрее.

1 Ответ

8 голосов
/ 20 декабря 2011

Это ответ на ваше последнее редактирование о том, как вы можете его протестировать.Это также касается комментария 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

Примечание. Я использовал, вероятно, потому, что вы можете запускать этот тест несколько раз и не переходить в бесконечный цикл, но я выполнил этот тест и могу легко запустить цикл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...