以下分三种情况,直接上代码
import com.alibaba.ttl.TransmittableThreadLocal;
import com.alibaba.ttl.threadpool.TtlExecutors;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
public class InheritableThreadLocalDemo {
public static void main(String[] args) {
// InheritableThreadLocalDemo.test1();
// InheritableThreadLocalDemo.test2();
InheritableThreadLocalDemo.test3();
}
public static void test1(){
ThreadLocal local = new ThreadLocal<>();
ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
threadPool.initialize();
Executor executor = threadPool.getThreadPoolExecutor();
local.set("parent main");
Thread worker = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(local.get());
}
});
executor.execute(worker);
executor.execute(worker);
local.set("parent main has changed");
executor.execute(worker);
}
public static void test2(){
ThreadLocal local = new TransmittableThreadLocal<>();
ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
threadPool.initialize();
Executor executor = threadPool.getThreadPoolExecutor();
local.set("parent main");
Thread worker = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(local.get());
}
});
executor.execute(worker);
executor.execute(worker);
local.set("parent main has changed");
executor.execute(worker);
}
public static void test3(){
ThreadLocal local = new TransmittableThreadLocal<>();
ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
threadPool.initialize();
Executor executor = TtlExecutors.getTtlExecutor(threadPool);
local.set("parent main");
Thread worker = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(local.get());
}
});
executor.execute(worker);
executor.execute(worker);
local.set("parent main has changed");
executor.execute(worker);
}
}



