Java 中的锁 ReentrantLock
Java juc 锁 大约 1757 字特性
可重入、互斥(读写互斥、写写互斥、读读互斥),只能有一个线程进行操作。
默认是非公平锁,可通过构造函数指定是否是公平锁。非公平锁性能略微好一些,主要是第一个持有锁的线程解锁后,若AQS
的双向链表中有等待抢锁的线程时,不从双向链表中取,而是直接给新来的抢锁线程获得。
代码示例
public class ReentrantLockDemo {
static Lock lock = new ReentrantLock();
public static void main(String[] args) {
new Thread(() -> {
lock.lock();
// 加几次放几次
lock.lock();
try {
System.out.println(LocalDateTime.now() + " " + Thread.currentThread().getName() + "----------外层");
lock.lock();
try {
System.out.println(LocalDateTime.now() + " " + Thread.currentThread().getName() + "---------内层");
} finally {
lock.unlock();
}
} finally {
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.unlock();
lock.unlock();
}
}, "t1").start();
new Thread(() -> {
lock.lock();
try {
System.out.println(LocalDateTime.now() + " " + Thread.currentThread().getName() + "----------外层");
lock.lock();
try {
System.out.println(LocalDateTime.now() + " " + Thread.currentThread().getName() + "---------内层");
} finally {
lock.unlock();
}
} finally {
lock.unlock();
}
}, "t2").start();
}
}
输出:
2021-03-27T20:24:26.263 t1----------外层
2021-03-27T20:24:26.263 t1---------内层
2021-03-27T20:24:29.267 t2----------外层
2021-03-27T20:24:29.268 t2---------内层
阅读 1523 · 发布于 2021-04-07
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓
昵称:
随便看看
换一批
-
GitHub 搜索技巧阅读 1669
-
Linux sort 命令简单使用阅读 2537
-
Kubernetes 网络代理工具 Telepresence 安装及升级阅读 1047
-
IDEA 一直卡在 Reopening files 对话框解决方法阅读 4314
-
Spring Boot Gradle 项目添加本地 jar 包依赖阅读 4261
-
Chrome 浏览器解决前端跨域问题阅读 2421
-
Windows10 访问网页提示找不到服务器 IP 地址阅读 10922
-
OpenResty 使用 Certbot 生成 SSL 证书阅读 3260
-
Flowable UI 建模工具搭建阅读 64
-
Java 语法糖 - 自动拆装箱阅读 980