留待下一篇文章编写,因为InheritableThreadLocal只能通过父子线(1->1)程传递变量,线程池里面的线程有可能是多个父线程共享的(也就是1个父线程提交的任务有可能由线程池中的多个子线程执行),因此有可能出现问题。阿里为了解决这个问题编写过一个框架-transmittable-thread-local,解决了父线程和线程池中线程的变量传递问题。
小结ThreadLocal线程本地变量是线程实例传递和存储共享变量的桥梁,真正的共享变量还是存放在线程实例本身的属性中。ThreadLocal里面的基本逻辑并不复杂,但是一旦涉及到性能影响、内存回收(弱引用)和惰性删除等环节,其实它考虑到的东西还是相对全面而且有效的。
个人博客Throwable's Blog