原子操作
“不可中断的一个操作,或者一系列操作”–原子操作,一个操作要么成功要么失败,没有中间状态。
Java中的count++
1.Java中count++
与C++
中count++
操作不一样,在Java
中此操作不是原子操作,包含了三个步骤:取值->修改->写入。
测试代码
1 | private void test() { |
上述代码,我们希望最终的打印结果为300,可是实际上,输出的结果是小于300。原因是count++
并不是原子操作,那么通过哪几种方法可以得到预期的结果呢?
synchronized
加锁
通过synchronized
关键字,将并行变成了串行操作,方法过重,效率低下。
1 | private synchronized void increase() { |
ReentrantLock
重入锁
1 | private void test() { |
AtomicInteger
Java自带原子操作类
1 | private void increase() { |