代码示例:

Lock lock = new ReentrantLock();
lock.lock();
try {
  // update object state
} finally {
   lock.unlock();
}

相比synchronized的优势

1.具有更好的并发性能,激烈争用情况下更佳的性能

2.添加了类似锁投票、定时锁等候和可中断锁等候的一些特性

源码分析:

点击lock方法,进入代码(NonfairSync):

final void lock() {
            //假设原始值是0
            //那么获取锁之后,将值设为1
            //并设置私有线程
            if (compareAndSetState(0, 1))
                setExclusiveOwnerThread(Thread.currentThread());
            else
                //如果值不是期望值0,则说明被其它线程占用锁
                //加锁失败,再次尝试加锁,失败则加入等待队列,
                //等待队列中会一直尝试加锁
                //如果队列加锁不成功,那么进入中断
                acquire(1);
        }

compareAndSetState方法运用了CAS

比较并替换的原理,此处是原子操作

参考文章:http://blog.csdn.net/fw0124/article/details/6672522

相关文章:

  • 2022-02-04
  • 2021-08-18
  • 2021-10-18
  • 2022-12-23
  • 2021-04-18
  • 2021-05-13
  • 2022-01-22
猜你喜欢
  • 2021-05-12
  • 2021-07-13
  • 2021-08-02
  • 2021-08-09
  • 2021-12-10
  • 2021-11-26
  • 2021-08-21
相关资源
相似解决方案