From 722e4e2c983fa82b83e07ab52df01d28136c2cfb Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Sun, 25 Oct 2026 18:52:00 +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 CountDownLatch、biasable 拼写;补充偏向锁在 JDK 15 中默认禁用并废弃(JEP 374),JDK 18 起相关参数不再生效。 --- notes/Java 并发.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/notes/Java 并发.md b/notes/Java 并发.md index aba8fb75..30079b7a 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -766,9 +766,9 @@ run..run..run..run..run..run..run..run..run..run..end 用来控制多个线程互相等待,只有当多个线程都到达时,这些线程才会继续执行。 -和 CountdownLatch 相似,都是通过维护计数器来实现的。线程执行 await() 方法之后计数器会减 1,并进行等待,直到计数器为 0,所有调用 await() 方法而在等待的线程才能继续执行。 +和 CountDownLatch 相似,都是通过维护计数器来实现的。线程执行 await() 方法之后计数器会减 1,并进行等待,直到计数器为 0,所有调用 await() 方法而在等待的线程才能继续执行。 -CyclicBarrier 和 CountdownLatch 的一个区别是,CyclicBarrier 的计数器通过调用 reset() 方法可以循环使用,所以它才叫做循环屏障。 +CyclicBarrier 和 CountDownLatch 的一个区别是,CyclicBarrier 的计数器通过调用 reset() 方法可以循环使用,所以它才叫做循环屏障。 CyclicBarrier 有两个构造函数,其中 parties 指示计数器的初始值,barrierAction 在所有线程都到达屏障的时候会执行一次。 @@ -1573,7 +1573,7 @@ public static String concatString(String s1, String s2, String s3) { ### 轻量级锁 -JDK 1.6 引入了偏向锁和轻量级锁,从而让锁拥有了四个状态:无锁状态(unlocked)、偏向锁状态(biasble)、轻量级锁状态(lightweight locked)和重量级锁状态(inflated)。 +JDK 1.6 引入了偏向锁和轻量级锁,从而让锁拥有了四个状态:无锁状态(unlocked)、偏向锁状态(biasable)、轻量级锁状态(lightweight locked)和重量级锁状态(inflated)。 以下是 HotSpot 虚拟机对象头的内存布局,这些数据被称为 Mark Word。其中 tag bits 对应了五个状态,这些状态在右侧的 state 表格中给出。除了 marked for gc 状态,其它四个状态已经在前面介绍过了。 @@ -1601,6 +1601,8 @@ JDK 1.6 引入了偏向锁和轻量级锁,从而让锁拥有了四个状态:

+需要注意的是,偏向锁在 JDK 15 中被默认禁用并废弃(JEP 374),JDK 18 起相关参数已不再生效。 + ## 十三、多线程开发良好的实践 - 给线程起个有意义的名字,这样可以方便找 Bug。