From 2abb5464c8ce9062a60f60a8e59f7ff9f39fd6d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E4=BC=9F?= <18056981502@163.com> Date: Tue, 14 Aug 2018 01:03:00 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=87=AA=E9=80=89=E9=94=81=20->=20?= =?UTF-8?q?=E8=87=AA=E6=97=8B=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java 并发.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Java 并发.md b/notes/Java 并发.md index 89ab7cac..28e69e36 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -1594,7 +1594,7 @@ ThreadLocal 从理论上讲并不是用来解决多线程并发问题的,因 互斥同步的进入阻塞状态的开销都很大,应该尽量避免。在许多应用中,共享数据的锁定状态只会持续很短的一段时间。自旋锁的思想是让一个线程在请求一个共享数据的锁时执行忙循环(自旋)一段时间,如果在这段时间内能获得锁,就可以避免进入阻塞状态。 -自选锁虽然能避免进入阻塞状态从而减少开销,但是它需要进行忙循环操作占用 CPU 时间,它只适用于共享数据的锁定状态很短的场景。 +自旋锁虽然能避免进入阻塞状态从而减少开销,但是它需要进行忙循环操作占用 CPU 时间,它只适用于共享数据的锁定状态很短的场景。 在 JDK 1.6 中引入了自适应的自旋锁。自适应意味着自旋的次数不再固定了,而是由前一次在同一个锁上的自旋次数及锁的拥有者的状态来决定。 From 7fc6ceac3c621239257bae76eb169593deca5292 Mon Sep 17 00:00:00 2001 From: zhangzhikai Date: Tue, 14 Aug 2018 14:45:21 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9CyclicBarrier=E9=83=A8?= =?UTF-8?q?=E5=88=86=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java 并发.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Java 并发.md b/notes/Java 并发.md index ab3528f2..e7d09e1f 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -759,7 +759,7 @@ run..run..run..run..run..run..run..run..run..run..end 用来控制多个线程互相等待,只有当多个线程都到达时,这些线程才会继续执行。 -和 CountdownLatch 相似,都是通过维护计数器来实现的。但是它的计数器是递增的,每次执行 await() 方法之后,计数器会加 1,直到计数器的值和设置的值相等,等待的所有线程才会继续执行。和 CountdownLatch 的另一个区别是,CyclicBarrier 的计数器可以循环使用,所以它才叫做循环屏障。 +和 CountdownLatch 相似,都是通过维护计数器来实现的。初始化的时候计数器count与构造函数传入的参数parties相同,每次有线程调用await方法时候,计数器count不断减1,知道count减为0时等待的所有线程才会继续执行。和 CountdownLatch 的另一个区别是,CyclicBarrier 可以通过调用reset方法循环使用,所以它才叫做循环屏障。 下图应该从下往上看才正确。 From 3056dea7b21034cbd1017dcd7652b7576ddd0be7 Mon Sep 17 00:00:00 2001 From: zhangzhikai Date: Tue, 14 Aug 2018 14:49:12 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9CyclicBarrier=E9=83=A8?= =?UTF-8?q?=E5=88=86=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java 并发.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Java 并发.md b/notes/Java 并发.md index e7d09e1f..e59cb9e7 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -759,7 +759,7 @@ run..run..run..run..run..run..run..run..run..run..end 用来控制多个线程互相等待,只有当多个线程都到达时,这些线程才会继续执行。 -和 CountdownLatch 相似,都是通过维护计数器来实现的。初始化的时候计数器count与构造函数传入的参数parties相同,每次有线程调用await方法时候,计数器count不断减1,知道count减为0时等待的所有线程才会继续执行。和 CountdownLatch 的另一个区别是,CyclicBarrier 可以通过调用reset方法循环使用,所以它才叫做循环屏障。 +和 CountdownLatch 相似,都是通过维护计数器来实现的。初始化的时候计数器count与构造函数传入的参数parties相同,每次有线程调用await方法时候,计数器count不断减1,直到count减为0时等待的所有线程才会继续执行。和 CountdownLatch 的另一个区别是,CyclicBarrier 可以通过调用reset方法循环使用,所以它才叫做循环屏障。 下图应该从下往上看才正确。