Java线程安全之通过atomic包或锁实现原子性操作

原子性:互斥访问,同一时刻只有一个线程对它进行操作通过atomic包或锁实现:

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容