ThreadLocal类的研究----->>>

ThreadLocal

继承实现关系

public class ThreadLocal extends Object
此类提供线程局部变量。 这些变量不同于 它们的正常对应物在于每个线程访问一个(通过其 get或者 set方法)有自己的,独立初始化的 变量的副本。 ThreadLocal实例通常是私有的 希望将状态与线程相关联的类中的静态字段(例如, 用户 ID 或交易 ID)。

只要线程是活的并且实例是可访问的,每个线程都暗中引用其线程本地变量的副本:线程消失后,其线程本地实例的所有副本都受到垃圾收集的约束(除非存在对这些副本的其他引用)。

方法

ThreadLocal类的研究----->>>

代码案例


import java.util.concurrent.TimeUnit;

class Person{
   volatile String name="张三";
    public Person(){

    }
}
public class ThreadLocalDemo {
    static  ThreadLocal<Person>tl= new ThreadLocal<>();
    public static void main(String[] args) {
        new Thread(()->{
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(tl.get());
        }).start();

        new Thread(()->{
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            tl.set(new Person());
            System.out.println(tl.get().name);
        }).start();
    }

}

ThreadLocal类的研究----->>>一个线程修改name,但是对于另一个线程依然是不可见的,即每个线程操做的都是一个副本;

代码对比----->>


import java.util.concurrent.TimeUnit;

class Person{
   volatile String name="张三";
    public Person(){

    }
}
public class ThreadLocalDemo {
   /* static  ThreadLocal<Person>tl= new ThreadLocal<>();*/
    static Person tl= new Person();
    public static void main(String[] args) {

      new Thread(()->{
          try {
              TimeUnit.SECONDS.sleep(2);
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
          System.out.println(tl.name);
      }).start();

      new Thread(()->{
          try {
              TimeUnit.SECONDS.sleep(1);
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
        tl.name="李四";
      }).start();
    }

}

ThreadLocal类的研究----->>>
图解ThreadLocal原理------->>>>>

对比结果可以发现ThreadLocal类的作用-----实现本地变量的副本!

ThreadLocal类的研究----->>>

上一篇:【笔记】斜率优化 DP


下一篇:NX二次开发-UFUN求一个三维向量的垂直向量UF_VEC3_ask_perpendicular