了解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最大的用处就是用来把实例变量共享成全局变量,在该线程中的任何方法中都可以访问该实例变量。