美文网首页
【Java并发编程实战】-----CAS

【Java并发编程实战】-----CAS

作者: lucode | 来源:发表于2018-02-19 23:43 被阅读13次

    CAS

    CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术。简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值
    两段代码

    class MyLock {
        private boolean locked = false;
        public boolean lock() {
            if(!locked) {
                locked = true;
                return true;
            }
            return false;
        }
    }
    
    class MyLock {
        private boolean locked = false;
        public synchronized boolean lock() {
            if(!locked) {
                locked = true;
                return true;
            }
            return false;
        }
    }
    

    很显然第一段代码在并发的时候 会有问题,第二段代码采用同步代码块的方式。也可以说是把原本的非原子操作转换为原子操作(转换成原子快)。
    当然采用 JUC 的方式变得很简单

    public static class MyLock {
        private AtomicBoolean locked = new AtomicBoolean(false);
        public boolean lock() {
            return locked.compareAndSet(false, true);
        }
    }
    

    locked变量不再是boolean类型而是AtomicBoolean。这个类中有一个compareAndSet()方法,它使用一个期望值和AtomicBoolean实例的值比较,和两者相等,则使用一个新值替换原来的值。在这个例子中,它比较locked的值和false,如果locked的值为false,则把修改为true。
    如果值被替换了,compareAndSet()返回true,否则,返回false。

    相关文章

      网友评论

          本文标题:【Java并发编程实战】-----CAS

          本文链接:https://www.haomeiwen.com/subject/ppmwtftx.html