TOP

Java高并发之无锁与Atomic源码分析(三)
2018-06-09 10:07:57 】 浏览:1793次 本网站的内容取自网络,仅供学习参考之用,绝无侵犯任何人知识产权之意。如有侵犯请您及时与本人取得联系,万分感谢。
Tags:Java 并发 Atomic 源码 分析

ce, int stamp) {
            this.reference = reference;
            this.stamp = stamp;
        }
        static <T> Pair<T> of(T reference, int stamp) {
            return new Pair<T>(reference, stamp);
        }
    }


    private volatile Pair<V> pair;


    // 进行cas操作的时候, 会对比stamp的值
    public boolean compareAndSet(V  expectedReference,
                                V  newReference,
                                int expectedStamp,
                                int newStamp) {
        Pair<V> current = pair;
        return
            expectedReference == current.reference &&
            expectedStamp == current.stamp &&
            ((newReference == current.reference &&
              newStamp == current.stamp) ||
            casPair(current, Pair.of(newReference, newStamp)));
    }


Demo


后台使用多个线程对用户充值, 要求只能充值一次


public class AtomicStampedReferenceDemo {
 static AtomicStampedReference<Integer> money=new AtomicStampedReference<Integer>(19,0);
    public staticvoid main(String[] args) {
        //模拟多个线程同时更新后台数据库,为用户充值
        for(int i = 0 ; i < 3 ; i++) {
            final int timestamp=money.getStamp();
            newThread() { 
                public void run() {
                    while(true){
                      while(true){
                          Integerm=money.getReference();
                            if(m<20){
                        if(money.compareAndSet(m,m+20,timestamp,timestamp+1)){
                          System.out.println("余额小于20元,充值成功,余额:"+money.getReference()+"元");
                                    break;
                                }
                            }else{
                              //System.out.println("余额大于20元,无需充值");
                                break ;
                     

请关注公众号获取更多资料


Java高并发之无锁与Atomic源码分析(三) https://www.cppentry.com/bencandy.php?fid=54&id=170262

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇JDK并发包详细总结 下一篇Java内存模型与指令重排

评论

验 证 码:
表  情:
内  容: