① ThreadLocal类:
② ThreadLocal类的作用:
- ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立。Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。
-
由于每个线程在访问该变量时,读取和修改的,都是自己独有的那一份变量拷贝,不会被其他线程访问,变量被彻底封闭在每个访问的线程中。
- ThreadLocal中定义了一个哈希表用于为每个线程都提供一个变量的副本:
1 static class ThreadLocalMap { 2 static class Entry extends WeakReference<ThreadLocal> { 3 /** The value associated with this ThreadLocal. */ 4 Object value; 5 Entry(ThreadLocal k, Object v) { 6 super(k); 7 value = v; 8 } 9 } 10 /** 11 * The table, resized as necessary. 12 * table.length MUST always be a power of two. 13 */ 14 private Entry[] table; 15 }