Thread的inheritableThreadLocals提供了线程共享数据的机制,但是其只是在线程创建时,拷贝父线程的集合的副本,后续父线程修改,其数据仍然无法共享,我想着通过继承Thread改下构造函数逻辑实现真正数据共享 也就是指向同一个集合罢了 源码在下面,本来没想着用反射 但这个字段是缺省的 最后用反射搞了一下 jdk9以上是搞不了的 一些重要的类(包括Thread)用反射会报错 查了一下ai他说通过jvm参数设置可以调 使得不会报错
不知道这个东西有没有实际意义hh
class MyThread extends Thread{
public MyThread(Runnable target) throws NoSuchFieldException, IllegalAccessException {
super(target);
//获取Thread类的类对象
Field field = Thread.class.getDeclaredField("inheritableThreadLocals");
Class<? extends MyThread> clazz= this.getClass();
Thread parents= Thread.currentThread();
field.setAccessible(true);
Object parentsMap= field.get(parents);
field.set(this,parentsMap);
field.setAccessible(false);
}
}
题目是让ai起的吸引眼球的标题