public class DemoMain {
static ThreadLocal<String> local = new ThreadLocal<>();
public static void main(String[] args) {
local.set("HH");
ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(1, 2, 20,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(1),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy()) {
@Override
public void execute(Runnable command) {
// 目的:异步线程传递ThreadLoad
String string = local.get();
super.execute(()-> {
local.set(Thread.currentThread().getName()+":"+string);
command.run();
local.remove();
});
}
};
for(int i=1; i<=4; i++) {
poolExecutor.execute(()->{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
System.out.println(local.get());
});
}
poolExecutor.shutdown();
// 其它类
Studen studen = new Studen() {
@Override
public void doSomething() {
System.out.println("befor");
super.doSomething();
System.out.println("after");
}
};
studen.doSomething();
}
}
其它类:
public class Studen {
private String name;
public Studen() {}
public void doSomething() {
System.out.println("Studen hhh");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
结果:
pool-1-thread-2
pool-1-thread-2:HH
main
main:HH
befor
Studen hhh
after
pool-1-thread-1
pool-1-thread-1:HH
pool-1-thread-2
pool-1-thread-2:HH
2268

被折叠的 条评论
为什么被折叠?



