当访问共享的可变数据时,通常需要使用同步。一种避免同步的方式就是不共享数据,仅在单线程内部访问数据,就不需要同步。该技术称之为线程封闭。 当数据封装到线程内部,即使该数据不是线程安全的,也会实现自动线程安全性。
在Thread类中有一个threadLocals成员变量,其类型是ThreadLocalMap,默认情况下为null。 ThreadLocal.ThreadLocalMap threadLocals = null;
软件开发之一并发编程之ThreadLocal源码分析
当某线程首次调用ThreadLocal变量的get或set方法时,会进行对象创建。在线程退出时,当前线程的threadLocals变量被清空。 private void exit() {
...
threadLocals = null;
inheritableThreadLocals = null;
...
}
|