Добавить в корзинуПозвонить
Найти в Дзене
Java

💡 Полезный Java-трюк: ThreadLocal.withInitial

() Если нужно, чтобы каждый поток имел собственное значение переменной, используйте ThreadLocal. Метод withInitial() позволяет задать значение по умолчанию, которое будет создаваться лениво — только при первом обращении потока. Пример: ThreadLocal<Integer> counter = ThreadLocal.withInitial(() -> 0); counter.get(); // 0 counter.set(70); counter.get(); // 70 Что происходит: • каждый поток получает свою независимую копию переменной • значение создаётся только когда поток впервые вызывает get() • нет гонок данных и не нужна синхронизация Это особенно полезно для: • хранения контекста запроса • connection/session объектов • временных данных в параллельных задачах • оптимизации без synchronized Главное помнить: ThreadLocal хранит данные на уровне потока, а не объекта.

💡 Полезный Java-трюк: ThreadLocal.withInitial()

Если нужно, чтобы каждый поток имел собственное значение переменной, используйте ThreadLocal.

Метод withInitial() позволяет задать значение по умолчанию, которое будет создаваться лениво — только при первом обращении потока.

Пример:

ThreadLocal<Integer> counter =

ThreadLocal.withInitial(() -> 0);

counter.get(); // 0

counter.set(70);

counter.get(); // 70

Что происходит:

• каждый поток получает свою независимую копию переменной

• значение создаётся только когда поток впервые вызывает get()

• нет гонок данных и не нужна синхронизация

Это особенно полезно для:

• хранения контекста запроса

• connection/session объектов

• временных данных в параллельных задачах

• оптимизации без synchronized

Главное помнить: ThreadLocal хранит данные на уровне потока, а не объекта.