1.什么是线程安全类
当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的交替执行和调度,并且不需要额外的同步以及在调用方代码不必要做其他的协调,这个类的行为依然是正确的,那么这个类是线程安全的类。
2.如何保证线程安全
1.不要跨线程共享变量
2.共享状态变为不可变的
3.在任何访问共享变量的时候使用同步
3.原子操作
1.原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会换到另一个线程)
2.java.util.concurrent.atomic包下实现了原子操作
3.java中java.util.concurrent.atomic(CAS理论)+volatile(内存可见性)关键字
4.a和b各为原子操作,但是a+b不等于原子操作
5.原子操作可以保证线程安全,volatile关键字保证了内存可见性
注:原子操作+volatile内存可见性达到了锁的效果
4.锁
1.锁保证了内存的可见性
2.锁保证了线程的互斥
3.锁保证了a和b各为原子操作,但是a+b等于原子操作
注:锁保证了原子性和内存可见性