了解ThreadLolocal

ThreadLocal(线程局部变量)

  • ThreadLocal提供了一种访问某个变量的特殊方式:访问的变量属于当前线程,即保证每个线程的变量不一样,而同一个线程在任何地方拿到的变量都是当前线程私有的,这就是所谓的线程隔离。

  • 如果要使用ThreadLocal,通常定义为private static 类型,在我看来最好定义为private static final类型。

  • 使用

     /**
      * ThreadLocal在线程A创建的时候,已经为你创建了一个DateFormat,这个DateFormat在该线程中共享。
      * 在线程B开启的时候会创建另外一个DateFormat,那么ThreadLocal和自己new对象的区别呢?ThreadLocal在该线程中的所有方法都可以使用,不需要传递
      */
     public class ThreadLocalTest {
         public static void main(String[] args) {
             System.out.println(DateUtil.THREAD_LOCAL.get().format(new Date()));
         }
     }
     ​
     class DateUtil {
         public static final ThreadLocal<DateFormat> THREAD_LOCAL = new ThreadLocal<DateFormat>() {
             @Override
             protected DateFormat initialValue() {
                 return new SimpleDateFormat("yyyy-MM-dd");
             }
         };
     }
    

      

  • 总结

    ThreadLocal并不是为了解决线程安全问题,而是提供了一种将实例绑定到当前线程的机制,类似于隔离的结果。ThreadLocal最大的用处就是用来把实例变量共享成全局变量,在该线程中的任何方法中都可以访问该实例变量。

原文地址:https://www.cnblogs.com/hucheng1997/p/11536542.html