首页 > 编程语言 > 详细

多线程并发工具——CAS原子变量

时间:2016-12-28 21:19:55      阅读:223      评论:0      收藏:0      [点我收藏+]

这是我参考的一篇文章《基于CAS的乐观锁实现》,讲述的是一种需要CPU支持的执行技术CAS(Compare and Swap)。

首先理解什么是原子性操作,意思是不能再拆分的操作,例如改写一个值,读取一个值都属于原子性操作。

那么CAS是两个操作,先比较旧值,比较通过后再进行改写,这种连合操作合并成一个指令交给CPU,由CPU操作来确保这是一个原子性操作。

多线程同时改写同一个值时,每个线程携带自己的旧值和新值交给CPU改写,CPU的运行是按逐条指令运行,如果发现旧值不符合,线程就会收到改写失败回应。

public final int incrementAndGet() {
    for (;;) {
        int current = get();
        int next = current + 1;
        if (compareAndSet(current, next))
            return next;
    }
}

因此AtomicInteger#incrementAndGet()方法里,会循环尝试使用compareAndSet(...)方法,直到成功为止。

 

相关的原子类所在包:java.util.concurrent.atomic

  • 操作一个对应的类型对象:
    Atomic + Boolean/Integer/Long/Reference
  • 操作一个对应类型的数组:
    Atomic + Integer/Long/Reference + Array

  • 操作一个对应类型的Field对象,类似反射方式改写对象字段:
    Atomic + Integer/Long/Reference + FieldUpdater

 

多线程并发工具——CAS原子变量

原文:http://www.cnblogs.com/hvicen/p/6230503.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!