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>,它存储了线程相关的值,不过事实上它并非这样实现的,与线程相关的值存储在线程对象自身中,线程终止后,这些值会被垃圾回收。
相比全局变量,线程本地变量会降低可重用性,引入隐晦的类间耦合。