From 49b3867666c817c1bd4987a9c91a709d39aa49c3 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sat, 23 Jun 2018 21:47:35 +0800 Subject: [PATCH] auto commit --- notes/Java 基础.md | 2 +- notes/Java 容器.md | 6 +++--- pics/3fdfc89d-719e-4d93-b518-29fa612b3b18.png | Bin 0 -> 23552 bytes 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 pics/3fdfc89d-719e-4d93-b518-29fa612b3b18.png diff --git a/notes/Java 基础.md b/notes/Java 基础.md index 5be9fd30..81c39800 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -477,7 +477,7 @@ System.out.println(InterfaceExample.x); - 从设计层面上看,抽象类提供了一种 IS-A 关系,那么就必须满足里式替换原则,即子类对象必须能够替换掉所有父类对象。而接口更像是一种 LIKE-A 关系,它只是提供一种方法实现契约,并不要求接口和实现接口的类具有 IS-A 关系。 - 从使用上来看,一个类可以实现多个接口,但是不能继承多个抽象类。 - 接口的字段只能是 static 和 final 类型的,而抽象类的字段没有这种限制。 -- 接口的方法只能是 public 的,而抽象类的方法可以有多种访问权限。 +- 接口的方法只能是 public 的,而抽象类的方法可以由多种访问权限。 **4. 使用选择** diff --git a/notes/Java 容器.md b/notes/Java 容器.md index 2d070ff4..55cffe2c 100644 --- a/notes/Java 容器.md +++ b/notes/Java 容器.md @@ -688,9 +688,9 @@ static final class HashEntry { } ``` -Segment 继承自 ReentrantLock,每个 Segment 维护着多个 HashEntry。 +ConcurrentHashMap 和 HashMap 实现上类似,最主要的差别是 ConcurrentHashMap 采用了分段锁(Segment),每个分段锁维护着几个桶(HashEntry),多个线程可以同时访问不同分段锁上的桶,从而使其并发度更高(并发度就是 Segment 的个数)。 -ConcurrentHashMap 和 HashMap 实现上类似,最主要的差别是 ConcurrentHashMap 采用了分段锁,每个分段锁维护着几个桶,多个线程可以同时访问不同分段锁上的桶,从而使其并发度更高(并发度就是 Segment 的个数)。 +Segment 继承自 ReentrantLock。 ```java static final class Segment extends ReentrantLock implements Serializable { @@ -722,7 +722,7 @@ final Segment[] segments; static final int DEFAULT_CONCURRENCY_LEVEL = 16; ``` -

+

### 2. size 操作 diff --git a/pics/3fdfc89d-719e-4d93-b518-29fa612b3b18.png b/pics/3fdfc89d-719e-4d93-b518-29fa612b3b18.png new file mode 100644 index 0000000000000000000000000000000000000000..781dca88c31ffcc04bdf8d0694e008197230265a GIT binary patch literal 23552 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 literal 0 HcmV?d00001