廖雪峰
资深软件开发工程师,业余马拉松选手。
资深软件开发工程师,业余马拉松选手。
Java的包除了提供底层锁、并发集合外,还提供了一组原子操作的封装类,它们位于包。
我们以为例,它提供的主要操作有:
- 增加值并返回新值:
- 加1后返回新值:
- 获取当前值:
- 用CAS方式设置:
Atomic类是通过无锁(lock-free)的方式实现的线程安全(thread-safe)访问。它的主要原理是利用了CAS:Compare and Set。
如果我们自己通过CAS编写,它大概长这样:
CAS是指,在这个操作中,如果的当前值是,那么就更新为,返回。如果的当前值不是,就什么也不干,返回。通过CAS操作并配合循环,即使其他线程修改了的值,最终的结果也是正确的。
我们利用可以编写一个多线程安全的全局唯一ID生成器:
通常情况下,我们并不需要直接用循环调用实现复杂的并发操作,而是用这样的封装好的方法,因此,使用起来非常简单。
在高度竞争的情况下,还可以使用Java 8提供的和。
使用提供的原子操作可以简化多线程编程:
- 原子操作实现了无锁的线程安全;
- 适用于计数器,累加器等。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/16851.html