【JUC】4.Synchronized与ReentrantLock对比
2024-10-21 04:16:17
与synchronized相同,ReentrantLock也是一种互斥锁;
synchronized与ReentrantLock的对比:
都是可重入锁
可以再次获取自己的内部锁,即:一个线程获取某对象锁,在没有释放此对象锁的同时,可以再次获得此锁;
一个锁每次被线程获取,锁计数器就增加1,知道锁计数器将为0,才能释放锁;
Synchronized依赖于JVM,ReenTrantLock依赖于API
Synchronized的很多优化,都是在JVM层面优化的,并不暴露给用户;
ReenTrantLock的各种功能实现,都可以用户自己通过调用API进行实现(lock,unLock);
ReenTrantLock增加了高级功能
等待可中断
// 调用: lock.lockInterruptibly( );
让等待锁的线程,放弃等待,去执行别的事情。
可实现公平锁
Synchronized默认非公平;ReenTrantLock默认也是非公平锁;
// 构造公平锁: Lock lock=new ReentrantLock(true)
锁可以绑定Condition,实现选择性通知
synchronized关键字与wait()和notify/notifyAll()方法相结合可以实现等待/通知机制;
ReentrantLock借助于与锁绑定的condition对象,来调用await()和signal/signalAll()方法来实现;
ReentrantLock可以实现tryLock
对于没有拿到锁的线程,可以令其做一些别的事情,不会阻塞;
Synchronized与ReentrantLock性能持平
在JVM各种锁机制的优化下,Synchronized在很多地方都默认使用CAS的乐观锁,进行优化了;
所以并不是ReentrantLock性能更强!!
最新文章
- CheetSheet
- 第二,C语言示例
- JCrop+GraphicsMagick+Im4Java 实现图像裁减
- 初识selenium-grid
- How to: Create Your Own Test Certificate (.pfx)
- Java实现Http服务器(二)
- HAProxy 代理负载均衡
- 用VMware vSphere Client客户端登陆vsphere5提示错误
- 在CDockablePane中嵌入CFormView
- Java中的常量治理
- 基于 HTML5 Canvas 的 3D 机房创建
- 流程控制之while循环
- 【Android Studio安装部署系列】十九、Android studio使用SVN
- Mybatis批量插入返回自增主键(转)
- IniHelper
- [AHOI2005] 航线规划
- SimpleUpdater.NET
- MongoDB 学习笔记(9)--- Limit与Skip方法
- javascript易混淆的split()、splice()、slice()方法详解
- C#.Net中操作XML方法一
热门文章
- [转] cmake源码编译安装jsoncpp
- 2-1 CLI 工程结构
- GSON工具类
- [LeetCode] 168. Excel Sheet Column Title 求Excel表列名称
- [LeetCode] 714. Best Time to Buy and Sell Stock with Transaction Fee 买卖股票的最佳时间有交易费
- 算法练习之二叉树的最大深度,二叉树的层次遍历 II
- Tomcat一些说明
- consul删除无效实例
- 最新 物易云通java校招面经 (含整理过的面试题大全)
- win运行canal