Ваш вопрос не показывает типичный способ использования Поставщика с ThreadLocal. Если вы хотите ThreadLocal из MyClass, старый (предварительно +1,8) способ сделать это было типично:
ThreadLocal<MyClass> local = new ThreadLocal<MyClass>();
// later
if (local.get() == null) {
local.put(new MyClass());
}
MyClass myClass = local.get();
Альтернатива была delcare подкласс ThreadLocal
, что отменяют метод initialValue
.
В 1.8, вы можете использовать вместо этого поставщика, чтобы справиться с этой инициализации:
ThreadLocal<MyClass> local = ThreadLocal.withInitial(() -> new MyClass());
Функционально эти два основном идентичны, но версия поставщика намного меньше кода писать.
Вы можете записать его еще короче, заменив '() -> новый MyClass()' на 'MyClass :: new'. – Holger
Неплохо, я не знал, что вы можете использовать этот синтаксис для конструкторов. Благодаря! – Sbodd