From ce9f53dad89bcd28404ef509eb58ff39edf34d3f Mon Sep 17 00:00:00 2001 From: moqi Date: Sun, 22 Apr 2018 12:19:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E4=BA=9B=E8=A1=A8=E8=BF=B0=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java 基础.md | 4 ++-- notes/Java 并发.md | 14 +++++++------- notes/Java 虚拟机.md | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/notes/Java 基础.md b/notes/Java 基础.md index 5375ce09..34bd383e 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -269,7 +269,7 @@ set.add(e2); System.out.println(set.size()); // 2 ``` -理想的散列函数应当具有均匀性,即不相等的实例应当均匀分不到所有可能的散列值上。这就要求了散列函数要把所有域的值都考虑进来,可以将每个域都当成 R 进制的某一位,然后组成一个 R 进制的整数。R 一般取 31,因为它是一个奇素数,如果是偶数的话,当出现乘法溢出,信息就会丢失,因为与 2 相乘相当于向左移一位。 +理想的散列函数应当具有均匀性,即不相等的实例应当均匀分布到所有可能的散列值上。这就要求了散列函数要把所有域的值都考虑进来,可以将每个域都当成 R 进制的某一位,然后组成一个 R 进制的整数。R 一般取 31,因为它是一个奇素数,如果是偶数的话,当出现乘法溢出,信息就会丢失,因为与 2 相乘相当于向左移一位。 一个数与 31 相乘可以转换成移位和减法:31\*x == (x<<5)-x。 @@ -506,7 +506,7 @@ protected 用于修饰成员,表示在继承体系中成员对于子类可见 设计良好的模块会隐藏所有的实现细节,把它的 API 与它的实现清晰地隔离开来。模块之间只通过它们的 API 进行通信,一个模块不需要知道其他模块的内部工作情况,这个概念被称为信息隐藏或封装。因此访问权限应当尽可能地使每个类或者成员不被外界访问。 -如果子类的方法覆盖了父类的方法,那么子类中该方法的访问级别不允许低于父类的访问级别。这是为了确保可以使用父类实例的地方都可以使用子类实例,也就是确保满足里式替换原则。 +如果子类的方法覆盖了父类的方法,那么子类中该方法的访问级别不允许低于父类的访问级别。这是为了确保可以使用父类实例的地方都可以使用子类实例,也就是确保满足里氏替换原则。 字段决不能是公有的,因为这么做的话就失去了对这个字段修改行为的控制,客户端可以对其随意修改。可以使用公有的 getter 和 setter 方法来替换公有字段。 diff --git a/notes/Java 并发.md b/notes/Java 并发.md index 3942e35b..53632ad5 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -715,10 +715,10 @@ java.util.concurrent(J.U.C)大大提高了并发性能,AQS 被认为是 J. public class CountdownLatchExample { public static void main(String[] args) throws InterruptedException { - final int totalTread = 10; - CountDownLatch countDownLatch = new CountDownLatch(totalTread); + final int totalThread = 10; + CountDownLatch countDownLatch = new CountDownLatch(totalThread); ExecutorService executorService = Executors.newCachedThreadPool(); - for (int i = 0; i < totalTread; i++) { + for (int i = 0; i < totalThread; i++) { executorService.execute(() -> { System.out.print("run.."); countDownLatch.countDown(); @@ -749,10 +749,10 @@ run..run..run..run..run..run..run..run..run..run..end public class CyclicBarrierExample { public static void main(String[] args) throws InterruptedException { - final int totalTread = 10; - CyclicBarrier cyclicBarrier = new CyclicBarrier(totalTread); + final int totalThread = 10; + CyclicBarrier cyclicBarrier = new CyclicBarrier(totalThread); ExecutorService executorService = Executors.newCachedThreadPool(); - for (int i = 0; i < totalTread; i++) { + for (int i = 0; i < totalThread; i++) { executorService.execute(() -> { System.out.print("before.."); try { @@ -1507,7 +1507,7 @@ public class ThreadLocalExample1 {

-每个 Thread 都有一个 TreadLocal.ThreadLocalMap 对象,Thread 类中就定义了 ThreadLocal.ThreadLocalMap 成员。 +每个 Thread 都有一个 ThreadLocal.ThreadLocalMap 对象,Thread 类中就定义了 ThreadLocal.ThreadLocalMap 成员。 ```java /* ThreadLocal values pertaining to this thread. This map is maintained diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md index 852e171c..4b72b865 100644 --- a/notes/Java 虚拟机.md +++ b/notes/Java 虚拟机.md @@ -123,7 +123,7 @@ objB.instance = objA; ### 2. 可达性 -通过 GC Roots 作为起始点进行搜索,能够到达到的对象都是都是可用的,不可达的对象可被回收。 +通过 GC Roots 作为起始点进行搜索,能够到达到的对象都是可用的,不可达的对象可被回收。