Java并发编程-ReentrantLock

代码示例:

复制代码
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

posted @   风过无痕的博客  阅读(245)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示