From db62964f8cd169a3b25f681d5a3a0c14aa52e51e Mon Sep 17 00:00:00 2001 From: HogwartsRico <359101562@qq.com> Date: Mon, 9 Apr 2018 17:13:32 +0800 Subject: [PATCH 1/3] =?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 显示-->显式 --- notes/Java 并发.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Java 并发.md b/notes/Java 并发.md index 742d6408..20e07195 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -76,7 +76,7 @@ ## 无限期等待(Waiting) -等待其它线程显示地唤醒,否则不会被分配 CPU 时间片。 +等待其它线程显式地唤醒,否则不会被分配 CPU 时间片。 | 进入方法 | 退出方法 | | --- | --- | From aaa026074b093667dd5627bab63fffc64700afb4 Mon Sep 17 00:00:00 2001 From: zhili Date: Tue, 10 Apr 2018 10:53:09 +0800 Subject: [PATCH 2/3] 0~2n -> [0, 2n-1] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 这样写是不是稍微明显一些 --- notes/分布式基础.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/分布式基础.md b/notes/分布式基础.md index b3ce172e..baa2fe32 100644 --- a/notes/分布式基础.md +++ b/notes/分布式基础.md @@ -95,7 +95,7 @@ **一致性哈希** -Distributed Hash Table(DHT):对于哈希空间 0\~2n,将该哈希空间看成一个哈希环,将每个节点都配置到哈希环上。每个数据对象通过哈希取模得到哈希值之后,存放到哈希环中顺时针方向第一个大于等于该哈希值的节点上。 +Distributed Hash Table(DHT):对于哈希空间 [0, 2n-1],将该哈希空间看成一个哈希环,将每个节点都配置到哈希环上。每个数据对象通过哈希取模得到哈希值之后,存放到哈希环中顺时针方向第一个大于等于该哈希值的节点上。

From cda2e5eaae59b33cccae7de574b2cb4d7dd0b114 Mon Sep 17 00:00:00 2001 From: Xiangmingzhe Date: Tue, 10 Apr 2018 11:05:18 +0800 Subject: [PATCH 3/3] improve juc --- notes/Java 并发.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/notes/Java 并发.md b/notes/Java 并发.md index 20e07195..2185171f 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -794,9 +794,10 @@ public class SemaphoreExample { try { semaphore.acquire(); System.out.print(semaphore.availablePermits() + " "); - semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); + } finally { + semaphore.release(); } }); } @@ -1399,7 +1400,7 @@ public final int getAndAddInt(Object var1, long var2, int var4) { } ``` -ABA :如果一个变量 V 初次读取的时候是 A 值,它的值被改成了 B,后来又被改回为 A,那 CAS 操作就会误认为它从来没有被改变过。J.U.C 包提供了一个带有标记的原子引用类“AtomicStampedReference”来解决这个问题,它可以通过控制变量值的版本来保证 CAS 的正确性。大部分情况下 ABA 问题不会影响程序并发的正确性,如果需要解决 ABA 问题,改用传统的互斥同步可能会比原子类更高效。 +ABA :如果一个变量 V 初次读取的时候是 A 值,它的值被改成了 B,后来又被改回为 A,那 CAS 操作就会误认为它从来没有被改变过。J.U.C 包提供了一个带有标记的原子引用类“AtomicStampedReference”来解决这个问题,它可以通过控制变量值的版本来保证 CAS 的正确性。大部分情况下 ABA 问题不会影响程序并发的正确性,如果需要解决 ABA 问题通常会采用携带版本号的方式(e.g `AtomicStampedReference`),或者改用传统的互斥同步可能会比原子类更高效。 ### 3. 无同步方案