ReentrantLock和Synchronized
synchronized ReentrantLock
2023-09-27 14:20:25 时间
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的时候,它们的是一样的,同一时间只能一个线程获取到锁,其它人只能等待。也就是说,总体上它们是一样的。
相关文章
- 【多线程】synchronized 和ReentrantLock
- 想会用synchronized锁,先掌握底层核心原理
- @Transactional和Synchronized同时使用会失效
- 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同 ?
- 线程同步的实现方式(volatile、synchronized、CountDownLatch)
- synchronized锁机制 之 代码块锁(转)
- Synchronized及其实现原理(一)
- synchronized
- java synchronized详解
- Java多线程:synchronized的可重入性
- Java SE1.6中的Synchronized
- Synchronized锁原理及 ConcurrentHashMap
- synchronized使用和原理全解
- Java多线程(五) 静态同步synchronized方法与synchronized(class)代码块
- 深入理解Java并发之synchronized实现原理