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 00000000..781dca88 Binary files /dev/null and b/pics/3fdfc89d-719e-4d93-b518-29fa612b3b18.png differ