ReentrantLock和Synchronized
2024-08-24 10:12:15
1 synchronized
1.1 一旦没有获取到就只能一直等待
A和B都获取同一个对象锁,如果A获取了,B没有获取到,那么在A释放该锁之前,B只能无穷等待下去。
1.2 synchronized是不公平锁
所谓的不公平就是后来的线程可能先获取大锁,从而会导致线程饥饿。
1.3 synchronized直接使用Object的wait/notify
2 Reentrantlock
2.1 多个conditionn来使用wait/notify
它可以让同步于同一个锁的线程等待不同的条件,这个是synchronized做不到的。参见ArrayBlockingQueue的实现。
或者说,它对同步于同一个锁的线程进行了子集划分。
2.2 获取锁超时
2.3 获取锁中断
2.4 如果不使用锁超时接口,没有获取到锁的话也要一直等待
2.5 ReentrantLock可以是公平的也可以是非公平的
公平的话,就是说,线程按照先来后到排队,fifo,先到的先获取锁。
3 共同点
当ReentrantLock不使用tryLock的时候,它们的是一样的,同一时间只能一个线程获取到锁,其它人只能等待。也就是说,总体上它们是一样的。
最新文章
- 数据结构作业——Sanji(优先队列)
- 创建ASP.NET Core MVC应用程序(2)-利用MySQL Connector NET连接到MySQL
- (转)Tomcat数据源连接池加密
- SQL select 语法(转)
- Hadoop 之MongoDB
- android 入门-关键词介绍
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- php wampserver 80 端口无法开启的解决方法
- Navi.Soft30.产品.格式化.操作手册
- 关于字符串计算size的方法比较
- union关键字 与大小端模式
- property、synthesize、id
- POJ 2516 Minimum Cost
- gops - Go语言程序查看和诊断工具
- 【VBA】セールの値は配列に変換方法
- 5. SprigBoot自动配置原理
- phalcon7开发环境搭建
- 006.MySQL双主-Master02可用配置
- Minimalist GNU for Windows
- sql 之优化小技巧