关于ThreadLocal的理解

ThreadLocal

ThreadLocal是一个关于建立线程局部变量的类。 一般状况下,咱们建立的变量是能够被任何一个线程访问并修改的。而使用ThreadLocal建立的变量只能被当前线程访问,其余线程则没法访问和修改。安全

  1. 建立,支持泛型,有get,set方法
ThreadLocal<String> stringThreadLocal = new ThreadLocal<>();
  1. 简单使用
private void test() {
    Thread t = new Thread() {
        ThreadLocal<String> stringThreadLocal = new ThreadLocal<>();

        @Override
        public void run() {
            super.run();
            stringThreadLocal ("www.yuxianghe.net");
            stringThreadLocal ();
        }
    };

    t.start();
}
  1. 为ThreadLocal设置默认的get初始值,须要重写initialValue方法.ide

  2. 实际上ThreadLocal的值是放入了当前线程的一个ThreadLocalMap实例中,因此只能在本线程中访问,其余线程没法访问。ThreadLocal实例实际上也是被其建立的类持有。而ThreadLocal的值其实也是被线程实例持有。它们都是位于堆上,只是经过一些技巧将可见性修改为了线程可见。关于堆和栈的比较,请参考Java中的堆和栈的区别.net

  3. 它的使用场景有: 实现单个线程单例以及单个线程上下文信息存储,好比交易id等。 实现线程安全,非线程安全的对象使用ThreadLocal以后就会变得线程安全,由于每一个线程都会有一个对应的实例。 承载一些线程相关的数据,避免在方法中来回传递参数。线程

相关文章
相关标签/搜索