Поясните в общих чертах что это и с чем его едят, а после - может и ссылку годную на пример :)
ThreadLocal - это такой тип для поля, привязанный к потоку. То есть, у каждого потока эта поле свое. Даже если это поле будет статическое, оно все равно у каждого потока будет свое. Некоторые считают, что это ещё одна "специфическая область видимости".
Почитать
ThreadLocal
— это тип, значение которого своё в каждом потоке.
Для чего такое может понадобиться? Если несколько сценариев.
Например, у вас есть приложение, которое пользуется различными библиотеками и фреймворками, цепочка вызовов уходит очень глубоко, и где-то там вызывает ваш callback. Вы хотели бы передать дополнительную информацию (например, права текущего юзера, или там просто кэш), но промежуточные фреймворки не протягивают через цепочку вызовов эту дополнительную информацию. Что делать? Можно воспользоваться статическими переменными, но что если ваше приложение многопоточное? За статические переменные будет конкуренция между потоками. Решение — кладите информацию на входе в ThreadLocal
, на выходе в callback'е можно будет забрать.
Другой сценарий — это тот же кэш. В условиях многопоточной программы держать кэш потокобезопасным может оказаться дорого, ведь при этом каждое обращение к кэшу означает дорогую синхронизацию. Решение — завести по экземпляру кэша в каждом потоке, положив его в ThreadLocal
.
Похожий сценарий описан здесь: многопоточный доступ к SimpleDateFormat
не разрешён, и чтобы не пересоздавать объект при каждом вызове, можно закэшировать его в ThreadLocal
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Возможно ли в Android сохранить разметку с значениями в файл, чтобы после можно было её из этого файла потом загрузить?
Необходимо продвинутое понимание и практические примеры , что и как работает в Java по многопоточностиЕсть ли учебные материалы и разбор практики?...
POJO (англPlain Old Java Object) — «старый добрый Java-объект», простой Java-объект, не унаследованный от какого-то специфического объекта и не реализующий...