У меня очень простой вопрос относительно разницы в производительности между ThreadLocal
и ConcurrentHashMap
. В некоторых местах моего кода мне нужно поддерживать сопоставление от Thread
до некоторого Object
, которое должно быть потокобезопасным. Один из вариантов - использовать ConcurrentHashMap
, а один - использовать ThreadLocal
. Любые преимущества/недостатки для любого из этих подходов, в основном с точки зрения скорости?Java - ThreadLocal vs ConcurrentHashMap
4
A
ответ
7
Это определенно случай для ThreadLocal. Значения ThreadLocal хранятся в объекте Thread, а не на параллельной карте, поэтому нет никакой блокировки и, следовательно, гораздо более эффективны. Также обратите внимание, что значения, прикрепленные к потоку через ThreadLocal, автоматически отбрасываются, когда поток умирает, что не произойдет с ConcurrentHashMap. Но последнее: если у вас есть потоки, которые каким-то образом «повторно используются», например, рабочие, содержащиеся в пуле, вы должны очистить значение ThreadLocal, прежде чем возвращать поток в пул.
Смежные вопросы
- 1. volatile vs threadLocal в java
- 2. Использование ThreadLocal vs Atomic
- 3. CallContext.LogicalGetData() vs ThreadLocal/ThreadStatic
- 4. Java 8 ConcurrentHashMap merge vs computeIfAbsent
- 5. ConcurrentHashMap vs ConcurrentSkipListMap уточнение
- 6. Java ConcurrentHashMap
- 7. Java: ConcurrentHashMap
- 8. Инициализация ThreadLocal в Java?
- 9. ConcurrentHashMap в Java?
- 10. Java ConcurrentHashMap действия atomicity
- 11. Java ConcurrentHashMap и синхронизация
- 12. Проблемы с Java ConcurrentHashmap
- 13. Производительность ThreadLocal vs с использованием параметров
- 14. ThreadLocal vs локальная переменная в Runnable
- 15. ThreadLocal plus-equals (+ =) в Java?
- 16. resultset.getTimestamp и предупреждение ThreadLocal Java
- 17. Java экземпляр переменной видимости (ThreadLocal)
- 18. ThreadLocal Очистка вектора в Java
- 19. Использование ThreadLocal
- 20. новый ConcurrentHashMap нового ConcurrentHashMap
- 21. Запрос относительно ConcurrentHashMap в Java
- 22. Шаблон для Java ConcurrentHashMap наборов
- 23. Java ConcurrentHashMap не потокобезопасен .. wth?
- 24. Java ConcurrentHashMap переопределяет все записи
- 25. Java: значение ConcurrencyLevel для ConcurrentHashMap
- 26. Сортировка значений в Java ConcurrentHashMap
- 27. ThreadLocal Singleton
- 28. примеры ConcurrentHashMap
- 29. Перебор ConcurrentHashMap
- 30. Сегментация ConcurrentHashMap
Является ли поток, владеющим объектом единственным, кому нужен доступ к указанному объекту? Если это так, как отмечает Джваткин, «ThreadLocal» явно лучше. В противном случае вам придется задаться вопросом, в какой форме будет выполняться этот межпоточный доступ. – selig
@SotiriosDelimanolis: Ваше заявление конфликтует с jwatkins's – okwap
@okwap Они правы. Я был неправ. Удаленный комментарий. Благодарю. –