当前位置:编程学习 > JAVA >>

java多线程

public class SimulatedCAS {
    private int value;
    public synchronized int getValue() { return value; }
    public synchronized int compareAndSwap(int expectedValue, int newValue) {
        if (value == expectedValue) 
            value = newValue;
        return value;
    }
}

public class CasCounter {
    private SimulatedCAS value;
    public int getValue() {
        return value.getValue();
    }
    public int increment() {
        int oldValue = value.getValue();
        while (value.compareAndSwap(oldValue, oldValue + 1) != oldValue)
            oldValue = value.getValue();
        return oldValue + 1;
    }
}

一个CAS计数器程序。这是无锁定且无等待算法(书上说的,模拟机器指令CAS原语),想问下为什么不会等待,难道不会阻塞线程。。菜鸟求大神!!!!! 多线程 Java CAS计数器 --------------------编程问答-------------------- 楼主的这个程序里哪里有多线程? --------------------编程问答--------------------
public class CasCounter {
    private SimulatedCAS value;
    public int getValue() {
        return value.getValue();
    }
    public int increment() {
        int oldValue = value.getValue();
        while (value.compareAndSwap(oldValue, oldValue + 1) != oldValue)
            oldValue = value.getValue();
        return oldValue + 1;
    }
}

这个类里面,没有任何的锁,因此称之为无所
当然,你可能会说,这个类调用了value.compareAndSwap(oldValue, oldValue + 1)方法,这个方法是加锁的,难道不会等待吗?
答案是,该函数是一个模拟实现,目的是告诉你该函数的具体含义。完全按照这个程序执行,当然会等待。但是,请注意,他只是模拟。在实际情况下,CAS是CPU的一个原语,该操作只占用一个时钟周期,是无需等待的。因此,在实际操作环境下,是无需等待的
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,