一:ThreadLocal简介:
从Java官方文档中的描述:ThreadLoacl类用来提供线程内部的局部变量,这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static 类型的,用于关联线程和线程上下文。
我们可以得知ThreadLoacl的作用是:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的声明周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。
总结:1:线程并发:在多线程并发的情境下。
2:传递数据:我们可以通过ThreadLocal在同一线程,不同组件中传递公共变量。
3:线程隔离:每个线程的变量都是独立的,不会相互影响。
二:ThreadLocal与synchronized的区别:
虽然ThreadLocal模式与synchronized关键字都是用于处理多线程并发访问变量的问题,不过两者处理问题的加角度和思路不同。
ThreadLoacl:原理:ThreadLocal采用以空间换时间的方式,为每一个线程都提供了一份变量的副本。从而实现同时访问而相不干扰。
侧重点:多线程中每个线程之间的数据隔离
synchronized:原理:同步机制采用以时间换空间的方式,只提供一份变量,让不同的线程排队访问。
侧重点:多个线程之间访问资源的同步。
总结:在刚刚的案例中,虽然使用ThreadLocal和synchronized都能解决问题,但是使用ThreadLocal更为合适,因为这样可以使程序拥有更高的并发性。