Почему у netty есть своя собственная ConcurrentHashMap?

StackOverflow https://stackoverflow.com/questions/8806860

  •  26-10-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

У нас было:поток 1 выполняет цикл над map.values().stream().sorted().findFirst() поток 2 одновременно помещает / удаляет с карты.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top