并发编程中,Lock锁的如何实现可重入及公平性?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1744个文字,预计阅读时间需要7分钟。
一、相似之处:Lock锁 + 代码块 vs SynchronizedLock锁是一种类似于synchronized同步代码块的线程同步机制。
二、从Java 5开始,java.util.concurrent.locks引入了Lock接口及其实现类,提供了更灵活的锁操作。
三、通常情况下,我们可以使用Lock锁来替代synchronized同步代码块。
一、相似之处:Lock锁 vs Synchronized 代码块Lock锁是一种类似于synchronized 同步代码块的线程同步机制。从Java 5开始java.util.concurrent.locks引入了若干个Lock锁的实现类,所以通常情况下我们不需要实现自己的锁,重要的是需要知道如何使用它们,了解它们实现背后的原理。
Lock锁API的基本使用方法和Synchronized 关键字大同小异,代码如下
Lock lock = new ReentrantLock(); //实例化锁
//lock.lock(); //上锁
boolean locked = lock.tryLock(); //尝试上锁
if(locked){
try {
//被锁定的同步代码块,同时只能被一个线程执行
}finally {
lock.unlock(); //放在finally代码块中,保证锁一定会被释放
}
}
synchronized(obj){
//被锁定的同步代码块,同时只能被一个线程执行
}
Lock锁使用看上去麻烦一点,但是java默认提供了很多Lock锁,能满足更多的应用场景。
本文共计1744个文字,预计阅读时间需要7分钟。
一、相似之处:Lock锁 + 代码块 vs SynchronizedLock锁是一种类似于synchronized同步代码块的线程同步机制。
二、从Java 5开始,java.util.concurrent.locks引入了Lock接口及其实现类,提供了更灵活的锁操作。
三、通常情况下,我们可以使用Lock锁来替代synchronized同步代码块。
一、相似之处:Lock锁 vs Synchronized 代码块Lock锁是一种类似于synchronized 同步代码块的线程同步机制。从Java 5开始java.util.concurrent.locks引入了若干个Lock锁的实现类,所以通常情况下我们不需要实现自己的锁,重要的是需要知道如何使用它们,了解它们实现背后的原理。
Lock锁API的基本使用方法和Synchronized 关键字大同小异,代码如下
Lock lock = new ReentrantLock(); //实例化锁
//lock.lock(); //上锁
boolean locked = lock.tryLock(); //尝试上锁
if(locked){
try {
//被锁定的同步代码块,同时只能被一个线程执行
}finally {
lock.unlock(); //放在finally代码块中,保证锁一定会被释放
}
}
synchronized(obj){
//被锁定的同步代码块,同时只能被一个线程执行
}
Lock锁使用看上去麻烦一点,但是java默认提供了很多Lock锁,能满足更多的应用场景。

