当<b>多个线程</b>访问某个类的时候,不管运行时环境采用何种调度方式或者这些线程将如何交替进行,并且在调用代码中不需要任何<b><font color="#b71c1c">额外的同步或者协同</font></b>,这个类都能表现出正确的行为,那么这个类就是线程安全的
<b>具体如何实现:</b>
<b><font color="#b71c1c">线程封闭:</font></b>
把对象封装到一个线程里,只有一个线程能获取此对象
<b><font color="#b71c1c">栈封闭:</font></b>
·使用局部变量,局部变量存在线程栈中,多个线程调用同一个方法会生成多个栈帧,局部变量不会共享
<b><font color="#b71c1c">ThreadLocal:</font></b>
是实现线程封闭最好的方法,ThreadLocal内部维护了一个Map,key为线程的名称,Value是我们需要封闭的对象,每个线程中的对象都对应着Map中的一个值
<b><font color="#b71c1c">无状态的类:</font></b>
<b>没有任何成员变量</b>的类,就叫无状态的类,这种类一定是线程安全的,
<b><font color="#b71c1c">让类不可变:</font></b>
一个类的所有成员变量都是私有的且都使用final关键字修饰,如果成员变量是一个对象,name这个对象所对应的这个类需要时安全的才可以
<b><font color="#b71c1c">加锁和CAS:</font></b>
使用synchronized关键字内置锁,使用显式锁,使用各种原子变量,更新操作使用CAS机制等