父线程将threadLocal的值传递给子线程、传递给线程池中的线程
依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>transmittable-thread-local</artifactId>
<version>2.14.3</version>
</dependency>
示例:
package javaa;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.TtlRunnable;
import com.alibaba.ttl.threadpool.TtlExecutors;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class JavaTest {
//方式1:使用hutool
//public static ThreadLocal<Object> threadLocal = ThreadUtil.createThreadLocal(true);
/**
* 方式2:使用TransmittableThreadLocal,线程池装饰TtlExecutors
*/
public final static TransmittableThreadLocal<Object> threadLocal = new TransmittableThreadLocal<>();
public static ExecutorService ttlPool =
TtlExecutors.getTtlExecutorService(new ThreadPoolExecutor(2,
2,
10,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>())
);
/**
* 方式3:使用TransmittableThreadLocal,线程装饰TtlRunnable
*/
public static ThreadPoolExecutor normalPool = new ThreadPoolExecutor(2,
2,
10,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>());
public static void main(String[] args) {
//方式2:使用ttl线程池
for (int i = 1; i < 30; i++) {
threadLocal.set(i);
ttlPool.execute(() -> {
System.out.println(Thread.currentThread().getName() + ":" + threadLocal.get());
});
System.out.println("清除");
threadLocal.remove();
}
//方式3:使用普通线程池
threadLocal.set("main thread-1");
normalPool.submit(TtlRunnable.get(
() -> System.out.println("1信息: " + threadLocal.get())
)
);
threadLocal.set("main thread-2");
normalPool.submit(TtlRunnable.get(
() -> System.out.println("2信息: " + threadLocal.get())
)
);
threadLocal.set("main thread-3");
normalPool.submit(TtlRunnable.get(
() -> System.out.println("3信息: " + threadLocal.get())
)
);
threadLocal.set("main thread-4");
normalPool.submit(TtlRunnable.get(
() -> System.out.println("4信息: " + threadLocal.get())
)
);
//清除
threadLocal.remove();
//清除后,打印null
normalPool.submit(TtlRunnable.get(
() -> System.out.println("5信息: " + threadLocal.get())
)
);
}
}