请关注我的微信公众号

个人微信公众号
技术交流群 (仅作技术交流):642646237

请关注我的头条号:

原子操作的例子


AtomicInteger
的incrementAndGet()
方法等价于++count
,并是原子操作;
AtomicInteger
的getAndIncrement()
方法等价于count++
,并是原子操作。
原子操作的好处
首先,不会忘了在正确的时候获取锁。
其次,由于没有锁的参与,对原子变量的操作不会引发死锁。
最后,原子变量是无锁(lock-free)非阻塞(non-blocking)算法的基础,这种算法可以不用锁和阻塞来达到同步的目的。无锁的代码比起有锁的代码更为复杂。java.util.concurrent包中的类都尽量使用了无锁的代码,使用户在一定程度上免于亲自实现。
volatile变量
将Java变量标记成volatile,可以保证变量的读写不被乱序执行。
volatile是一种低级形式的同步。将变量标记成volatile
并不能保证变量的++操作是原子的。
不建议使用volatile变量
随着JVM被不断优化,其提供了一些低开销的锁,volatile
变量的适用场景也越来越少。
应当在java.util.concurrent.atomic包中寻找更合适的工具。
网友评论