ThreadLocals сложно использовать - PullRequest
       21

ThreadLocals сложно использовать

1 голос
/ 03 декабря 2009

Я использую ThreadLocal переменные (через переменные Clojure, но следующее то же самое для простых ThreadLocal в Java) и очень часто сталкиваюсь с проблемой, что я не могу быть уверен, что определенный путь к коду будут приняты в той же теме или в другой. Для кода под моим контролем это, очевидно, не слишком большая проблема, но для полиморфного стороннего кода иногда даже нет способа статически определить, безопасно ли предполагать однопоточное выполнение.

Я склонен думать, что это неотъемлемая проблема с ThreadLocal s, но я хотел бы услышать некоторые советы о том, как их безопасно использовать.

Ответы [ 2 ]

9 голосов
/ 03 декабря 2009

Тогда не используйте ThreadLocals! Они специально предназначены для случаев, когда вам нужна переменная, связанная с потоком, как если бы была Map<Thread,T>.

0 голосов
/ 03 декабря 2009

Типичный вариант использования (насколько мне известно) для ThreadLocal находится в среде веб-приложения. Фильтр HTTP получает соединение с базой данных по входящему запросу и сохраняет соединение в статическом ThreadLocal. Все последующие контроллеры, нуждающиеся в соединении, могут легко получить его из инфраструктуры, используя статический вызов. Когда ответ возвращается, тот же фильтр снова освобождает соединение.

...