zoukankan      html  css  js  c++  java
  • 乐观锁(Optimistic Lock)

    乐观锁(非阻塞)指不通过锁表来解决并发问题,一般情况下表数据都会加入一个version字段,对该字段进行比较更新来保证数据的一致性。

    这里写了个demo,应该可以说明乐观锁的问题。

    public class TestOptimisticLock implements Runnable {
        private AtomicLong count = new AtomicLong(0);
    
        public void inc() {
            boolean updated = false;
            while (!updated) {
                Long prevCount = this.count.get();
                updated = this.count.compareAndSet(prevCount, prevCount + 1);
                System.out.println("current thread : " + Thread.currentThread() + ";count: " + count());
            }
        }
    
        public Long count() {
            return this.count.get();
        }
    
        public static void main(String[] args) throws InterruptedException {
            TestOptimisticLock test = new TestOptimisticLock();
            for(int i =0 ;i<1000;i++){
                new Thread(test).start();
            }
            Thread.sleep(2000L);
            System.out.println("final count : " + test.count());
        }
    
        @Override
        public void run() {
            inc();
        }
    }

    机制:通过while循环,一直进行轮询检查是否有资格进行更新操作,并且利用AtomicLong的原子操作保证了每一次更新只有一条线程在进行操作。

  • 相关阅读:
    Android Studio轻松上手指南(1)
    在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程
    opencv提取截获图像(总结摘来)
    10.正则表达式匹配
    遍历 Map 的方式
    09.回文数
    08.字符串转换位整数
    07.整数反转
    06. Z字型变换
    05. 求最长回文子串
  • 原文地址:https://www.cnblogs.com/rayallenbj/p/9382257.html
Copyright © 2011-2022 走看看