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的原子操作保证了每一次更新只有一条线程在进行操作。

  • 相关阅读:
    南邮NOJ Counter Attack
    南邮NOJ 计算机基础知识大赛4
    南邮NOJ 计算机基础知识大赛4
    南邮NOJ 计算机基础知识大赛4
    南邮NOJ 计算机基础知识大赛4
    南邮NOJ DDKFC
    南邮NOJ DDKFC
    南邮NOJ DDKFC
    南邮NOJ没有被接待的童鞋
    【POJ】2828 Buy Tickets
  • 原文地址:https://www.cnblogs.com/rayallenbj/p/9382257.html
Copyright © 2011-2022 走看看