原子性:互斥访问,同一时刻只有一个线程对它进行操作通过atomic包或锁实现:
Atomic包是java.util.concurrent下的另一个专门为线程安全设计的java的包,包含多个原子性操作的类。基本特性就是在多线程情况下,当多个线程想要同时操作这些类的某些实例方法时,具有排他性。
1、使用AtomicInteger,原理:unsafe类的实现CompareAndSetInt(CAS)方法,循环判断当前值和底层值(工作内存,主内存)是否相同再进行操作
2、使用AtomicLong类,LongAnder类(大量并发,压力并发,数组shell分发)的区别
3、AtomicReference类
4、AtomicIntegerFieldUpdater类,声明的类型属性必须使用volatile关键字修饰
5、AtomicStampReference: CAS算法的ABA问题
6、AtomicLongArray
7、AtomicBoolean,可以通过对比使代码只执行一次
1、synchronized锁:依赖JVM实现锁 修饰代码块 修饰方法 修饰静态方法 修饰类
2、Lock锁,JDK代码层面的锁,依赖特殊CPU指令,实现类如ReentrantLock