Reent rantLock 是 java.util.concurrent (J.U.C)包中的锁,相⽐于 synchroniz ed,它多了以下⾼级
功能:
1. 等待可中断
当持有锁的线程⻓期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情。
2. 可实现公平锁
公平锁是指多个线程在等待同⼀个锁时,必须按照申请锁的时间顺序来依次获得锁。
synchroniz ed 中的锁是⾮公平的,Reent rantLock 默认情况下也是⾮公平的,但可以通过带布尔值
的构造函数要求使⽤公平锁。
3. 锁绑定多个条件
⼀个 Reent rantLock 对象可以同时绑定多个 Condition 对象。
1. 锁的实现
synchroniz ed 是 JVM 实现的,⽽ Reent rantLock 是 JDK 实现的。
2. 性能
新版本 Java 对 synchronized 进⾏了很多优化,例如⾃旋锁等。⽬前来看它和 Reentrant Lock 的性能
基本持平了,因此性能因素不再是选择 Reentrant Lock 的理由。synchroniz ed 有更⼤的性能优化空
间,应该优先考虑 synchroniz ed。
3. 功能
Reent rantLock 多了⼀些⾼级功能。
4. 使⽤选择
除⾮需要使⽤ Reent rantLock 的⾼级功能,否则优先使⽤ synchroniz ed。这是因为 synchroniz ed 是
JVM 实现的⼀种锁机制,JVM 原⽣地⽀持它,⽽ Reent rantLock 不是所有的 JDK 版本都⽀持。并且
使⽤ synchroniz ed 不⽤担⼼没有释放锁⽽导致死锁问题,因为 JVM 会确保锁的释放。
当多个线程访问某个类时,不管运⾏时环境采⽤何种调度⽅式或者这些进程如何交替执⾏,并且在主调代
码中不需要任何额外的同步或协同,这个类都能表现出正确的⾏为,那么就称为这个类是线程安全的。
原⼦性:提供了互斥访问,同⼀时刻只能有⼀个线程来对他进⾏操作
可⻅性:⼀个线程对主内存的修改可以及时的被其他线程观察到
有序性:⼀个线程观察其他线程中的指令执⾏顺序,由于指令重排序的存在,该观察结果⼀般杂乱⽆章
3、synchronized 和 ReentrantLock ⽐较
线程安全性
1、定义
2、原⼦性