Skip to content

Commit 6d51908

Browse files
committed
auto commit
1 parent 668ee4e commit 6d51908

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

notes/Java 并发.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1280,7 +1280,7 @@ Thread 对象的结束先行发生于 join() 方法返回。
12801280

12811281
# 十一、线程安全
12821282

1283-
多个线程不管以何种方式访问某个类,并在在主调代码中不需要进行同步,都能表现正确的行为。
1283+
多个线程不管以何种方式访问某个类,并且1在主调代码中不需要进行同步,都能表现正确的行为。
12841284

12851285
线程安全有以下几种实现方式:
12861286

notes/算法.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ private void swim(int k) {
694694
}
695695
```
696696

697-
类似地,当一个节点比子节点来得小,也需要不断地向下进行比较和交换操作,把这种操作称为下沉。一个节点如果有两个子节点,应当与两个子节点中最大那么节点进行交换
697+
类似地,当一个节点比子节点来得小,也需要不断地向下进行比较和交换操作,把这种操作称为下沉。一个节点如果有两个子节点,应当与两个子节点中最大那个节点进行交换
698698

699699
<div align="center"> <img src="../pics//72f0ff69-138d-4e54-b7ac-ebe025d978dc.png" width="400"/> </div><br>
700700

@@ -796,7 +796,7 @@ public class HeapSort<T extends Comparable<T>> extends Sort<T> {
796796

797797
对于堆排序,由于要对 N 个节点进行下沉操作,因此复杂度为 NlogN。
798798

799-
堆排序时一种原地排序,没有利用额外的空间。
799+
堆排序是一种原地排序,没有利用额外的空间。
800800

801801
现代操作系统很少使用堆排序,因为它无法利用局部性原理进行缓存,也就是数组元素很少和相邻的元素进行比较。
802802

@@ -1123,7 +1123,7 @@ public class ArrayStack<Item> implements MyStack<Item> {
11231123

11241124
### 2. 链表实现
11251125

1126-
需要使用链表的头插法来实现,因为头插法中最后压入栈的元素在链表的开头,它的 next 指针指向前一个压入栈的元素,在弹出元素时就可以通过 next 指针遍历到前一个压入栈的元素从而让这个元素称为新的栈顶元素
1126+
需要使用链表的头插法来实现,因为头插法中最后压入栈的元素在链表的开头,它的 next 指针指向前一个压入栈的元素,在弹出元素时就可以通过 next 指针遍历到前一个压入栈的元素从而让这个元素成为新的栈顶元素
11271127

11281128
```java
11291129
public class ListStack<Item> implements MyStack<Item> {

notes/设计模式.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ if (uniqueInstance == null) {
143143
}
144144
```
145145

146-
uniqueInstance 采用 volatile 关键字修饰也是很有必要的`uniqueInstance = new Singleton();` 这段代码其实是分为三步执行
146+
uniqueInstance 采用 volatile 关键字修饰也是很有必要的`uniqueInstance = new Singleton();` 这段代码其实是分为三步执行
147147

148148
1. 为 uniqueInstance 分配内存空间
149149
2. 初始化 uniqueInstance
@@ -219,7 +219,14 @@ public enum Singleton {
219219
}
220220
```
221221

222-
该实现在多次序列化再进行反序列化之后,不会得到多个实例。而其它实现,为了保证不会出现反序列化之后出现多个实例,需要使用 transient 修饰所有字段,并且实现序列化和反序列化的方法。
222+
```html
223+
firstName
224+
secondName
225+
secondName
226+
secondName
227+
```
228+
229+
该实现在多次序列化再进行反序列化之后,不会得到多个实例。而其它实现需要使用 transient 修饰所有字段,并且实现序列化和反序列化的方法。
223230

224231
该实现可以防止反射攻击。在其它实现中,通过 setAccessible() 方法可以将私有构造函数的访问级别设置为 public,然后调用构造函数从而实例化对象,如果要防止这种攻击,需要在构造函数中添加防止多次实例化的代码。该实现是由 JVM 保证只会实例化一次,因此不会出现上述的反射攻击。
225232

0 commit comments

Comments
 (0)