【并发编程】Java中的原子操作 (2)

只能保证一个共享变量的原子操作:当对一个共享变量执行操作时,我们可以使用循环CAS的方式来保证原子操作,但是对多个共享变量操作时,循环CAS就无法保证操作的原子性,这个时候就可以用锁,或者有一个取巧的办法,就是把多个共享变量合并成一个共享变量来操作。比如有两个共享变量i=2,j=a,合并一下ij=2a,然后用CAS来操作ij。从Java1.5开始JDK提供了AtomicReference类来保证引用对象之间的原子性,你可以把多个变量放在一个对象里来进行CAS操作。

使用锁来保证原子操作

还是以上面的列子为列,普通的计数器我们只需要在计数方法上加锁就行了:

public synchronized void add(int delta){ this.count = count+delta; }

执行结果如下:

normalCounter:1000000 safeCounter:1000000

两个计数器都能拿到正确的结果

CPU是怎么实现原子操作的

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwwxd.html