#java #многопоточность
Поясните в общих чертах что это и с чем его едят, а после - может и ссылку годную
на пример :)
Ответы
Ответ 1
ThreadLocal — это тип, значение которого своё в каждом потоке. Для чего такое может понадобиться? Если несколько сценариев. Например, у вас есть приложение, которое пользуется различными библиотеками и фреймворками, цепочка вызовов уходит очень глубоко, и где-то там вызывает ваш callback. Вы хотели бы передать дополнительную информацию (например, права текущего юзера, или там просто кэш), но промежуточные фреймворки не протягивают через цепочку вызовов эту дополнительную информацию. Что делать? Можно воспользоваться статическими переменными, но что если ваше приложение многопоточное? За статические переменные будет конкуренция между потоками. Решение — кладите информацию на входе в ThreadLocal, на выходе в callback'е можно будет забрать. Другой сценарий — это тот же кэш. В условиях многопоточной программы держать кэш потокобезопасным может оказаться дорого, ведь при этом каждое обращение к кэшу означает дорогую синхронизацию. Решение — завести по экземпляру кэша в каждом потоке, положив его в ThreadLocal. Похожий сценарий описан здесь: многопоточный доступ к SimpleDateFormat не разрешён, и чтобы не пересоздавать объект при каждом вызове, можно закэшировать его в ThreadLocal.Ответ 2
ThreadLocal - это такой тип для поля, привязанный к потоку. То есть, у каждого потока эта поле свое. Даже если это поле будет статическое, оно все равно у каждого потока будет свое. Некоторые считают, что это ещё одна "специфическая область видимости". Почитать О бедном ThreadLocal замолвите слово Использование ThreadLocal переменных
Комментариев нет:
Отправить комментарий