在使用ThreadLocal时,很可能想的是把变量A放在ThreadLocal中,然后就认为ThreadLocal.get()的对象就是线程安全的了,这样想确实是错误的,因为A==ThreadLocal.get(),所有如果其它线程改变了A的值,那么ThreadLocal.get()对象值也就改变了,所以是线程不安全的。
1、ThreadLocal不是解决共享变量线程安全的。
2、ThreadLoca.set(A),如果A线程安全,那个ThreadLocal.get()才是线程安全,反之不安全。
3、ThreadLocalMap与HashMap结构不一样,ThreadLocalMap不是通过链表来解决hash冲突,而是在冲突时直接循环查找数组空位放入,ThreadLocalMap.get()时如果通过hashcode找到的数组值(一个Entry)不对,则循环数组查找。