Почему у netty есть собственный ConcurrentHashMap? - PullRequest
2 голосов
/ 10 января 2012

Я заметил, что у Netty есть несколько внутренних утилит Concurrent HashMap.Мне любопытно, почему Netty не использует ConcurrentHashMap, встроенный в ядро ​​Java.В каком-то смысле реализация Netty лучше, или она имеет какую-то новую функциональность?Я работаю над проектом, для которого требуется Concurrent HashMap, и спорю, стоит ли мне использовать реализацию netty, но я не вижу разницы в исходном коде.

Ответы [ 2 ]

5 голосов
/ 11 января 2012

ConcurrentHashMap не существовало до JSR-166 , который был выпущен в Java 5 как пакет java.util.concurrent.

Netty не включает их собственные ConcurrentHashMap, потому что он превосходен - фактически, это, безусловно, просто копия JSR-166 - так что они могут работать на Java 1.4.

Для ваших собственных проектов вы должны просто использовать java.util.concurrent.ConcurrentHashMap, если вы можете взять зависимость от Java 5. А если вы не можете, то вы должны просто включить его в свой продукт (и изменить имя пакета так, чтобы он не конфликтует с включенными проектами среды выполнения Java 5. Каждый раз, когда вы можете заставить Дуга Ли или Брайана Гетца написать для вас ваш потокобезопасный код, вы, вероятно, должны это сделать.

0 голосов
/ 24 ноября 2018

Netur ConcurrentHashMap на самом деле глючит;это не потокобезопасно.

Я обнаружил, что недавно.Вы можете доказать это простым тестом.

У нас было: thread1 зацикливается на map.values ​​(). Stream (). Sorted (). FindFirst () thread2 одновременно помещается / удаляется с карты.

По своей конструкции любая форма итерации не обязательно должна отражать карту, но она никогда не должна завершаться с ArrayIndexOutOfBoundsException в каком-то глубоком и непонятном коде, если только версия netty не испортила данные карты, в то время как поток потоков jdk полагается на нее.

...