TGViewer
Библиотека джависта | Java, Spring, Maven, Hibernate Библиотека джависта | Java, Spring, Maven, Hibernate @javaproglib · 22K subscribers
Post #7606 2.67K
🧵 Как починить мертвый ThreadLocal в пуле потоков

Если положить RequestId / userId / traceId в ThreadLocal и передать задачу в ExecutorService в итоге значение пропадёт. InheritableThreadLocal помогает только при явном создании потока, но не при переиспользовании из пула.

Alibaba решили это ещё в 2013 году, а библиотека до сих пор активно поддерживается → TransmittableThreadLocal (TTL).

🔹 Подключается:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>transmittable-thread-local</artifactId>
<version>2.14.5</version>
</dependency>


🔹 Используется как обычный ThreadLocal, только умнее:
TransmittableThreadLocal<String> traceId = new TransmittableThreadLocal<>();
traceId.set("req-123");

ExecutorService pool = TtlExecutors.getTtlExecutorService(
Executors.newFixedThreadPool(4)
);

pool.submit(() -> {
// "req-123" — доступен здесь, в потоке из пула
System.out.println(traceId.get());
});


🔹 Три способа интеграции

→ Обернуть Runnable/Callable — TtlRunnable.get(task)
→ Обернуть пул — TtlExecutors.getTtlExecutorService(pool)
→ Java Agent — вообще без изменений в коде: -javaagent:transmittable-thread-local.jar

Агентовый режим особенно полезен, когда нужно прозрачно встроить TTL в легаси-проект или сторонний фреймворк — он патчит JDK-классы пулов на уровне байткода.

0 зависимостей. Работает с виртуальными потоками (Project Loom). Поддерживает кастомный TtlCopier для глубокого копирования значений при передаче в дочерний поток.

Актуально везде, где есть distributed tracing, MDC, tenant isolation или любой per-request контекст в многопоточке.

⚠️ README встретит иероглифами, не пугайся, английская версия лежит в README-EN.md.

🔗 Репозиторий на GitHub

══════ Навигация ══════
Вакансии • Задачи • Собесы

🐸 Библиотека джависта

#Enterprise
  • ❤ 6
  • 👍 4
  • 🔥 1
More from @javaproglib
  1. Oct 14, 2026Post #7897
  2. Oct 14, 2026Почему разработчик планирует отдавать больше задач Claude Винсент Шмальбах описал план пер…
  3. Oct 14, 2026🛠 Контейнер запущен, а тест всё равно падает Порт уже открыт, но приложение ещё применяет…
  4. Oct 13, 2026🧠 Почему BigDecimal считает 2.0 и 2.00 разными Что выведут эти две строки? var a = new Bi…
  5. Oct 12, 2026👀 Как вы смотрите видео? Разбираете урок, слушаете интервью фоном или начинаете на телефо…
  6. Oct 10, 2026Post #7892
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →