2014-02-19 2 views
4

У меня очень простой вопрос относительно разницы в производительности между ThreadLocal и ConcurrentHashMap. В некоторых местах моего кода мне нужно поддерживать сопоставление от Thread до некоторого Object, которое должно быть потокобезопасным. Один из вариантов - использовать ConcurrentHashMap, а один - использовать ThreadLocal. Любые преимущества/недостатки для любого из этих подходов, в основном с точки зрения скорости?Java - ThreadLocal vs ConcurrentHashMap

+0

Является ли поток, владеющим объектом единственным, кому нужен доступ к указанному объекту? Если это так, как отмечает Джваткин, «ThreadLocal» явно лучше. В противном случае вам придется задаться вопросом, в какой форме будет выполняться этот межпоточный доступ. – selig

+0

@SotiriosDelimanolis: Ваше заявление конфликтует с jwatkins's – okwap

+0

@okwap Они правы. Я был неправ. Удаленный комментарий. Благодарю. –

ответ

7

Это определенно случай для ThreadLocal. Значения ThreadLocal хранятся в объекте Thread, а не на параллельной карте, поэтому нет никакой блокировки и, следовательно, гораздо более эффективны. Также обратите внимание, что значения, прикрепленные к потоку через ThreadLocal, автоматически отбрасываются, когда поток умирает, что не произойдет с ConcurrentHashMap. Но последнее: если у вас есть потоки, которые каким-то образом «повторно используются», например, рабочие, содержащиеся в пуле, вы должны очистить значение ThreadLocal, прежде чем возвращать поток в пул.

Смежные вопросы