java 并发基础

ThreadLocal

  允许将每个线程与持有数值的对象关联在一起,提供get,set访问器,为每个使用它的线程维持一份单独的拷贝。所以,get总是返回由当前执行线程通过set设置的最新值。

  例通过ThreadLocal存储jdbc数据库连接使其成为线程安全的。

  

private static ThreadLocal<Connection> conn=new ThreadLocal<Connection>(){
        public  Connection initialValue(){
                return DriverManager.getConnection(DB_URL);
                }
    }
 public static Connection getConnection(){
    return conn.get();
}

  线程首次调用ThreadLocal.get方法时,会请求initialValue提供一个初始值。

  概念上来说,可以将ThreadLocal<T>看作map<Thread,T>,它存储了线程相关的值,不过事实上它并非这样实现的,与线程相关的值存储在线程对象自身中,线程终止后,这些值会被垃圾回收。

  

  相比全局变量,线程本地变量会降低可重用性,引入隐晦的类间耦合。

  

原文地址:https://www.cnblogs.com/UalBlog/p/10594659.html