From 1ae7d49e066e96d2f3de02fab8942c600b00e683 Mon Sep 17 00:00:00 2001 From: HuaHero Date: Mon, 6 Nov 2023 15:33:52 +0800 Subject: [PATCH] =?UTF-8?q?Update=20Java=20=E5=B9=B6=E5=8F=91.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将同步互斥的sychornized和ReentrantLock两个锁的比较通过表格来更清晰易记 --- notes/Java 并发.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/notes/Java 并发.md b/notes/Java 并发.md index 6222b88c..9fdd9937 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -334,6 +334,7 @@ future.cancel(true); Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLock。 + ### synchronized **1. 同步一个代码块** @@ -489,6 +490,15 @@ public static void main(String[] args) { ### 比较 +| **比较点** | **synchronized** | **ReentrantLock** | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------------------------------------- | +| **锁的实现** | JVM实现 | JDK实现 | +| **性能** | 新版本Java已优化很多,例如自旋锁等,性能与ReentrantLock大致相同 | 与ReentrantLock大致相同 | +| **等待是否可中断**(当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情。) | 不可中断 | 可中断 | +| **公平锁**(指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁) | 非公平 | 默认非公平,但也可以是公平的 | +| **锁绑定多个条件** | | 一个ReentrantLock可以同时绑定多个Condition对象 | + + **1. 锁的实现**