File tree Expand file tree Collapse file tree 3 files changed +13
-6
lines changed Expand file tree Collapse file tree 3 files changed +13
-6
lines changed Original file line number Diff line number Diff line change @@ -1280,7 +1280,7 @@ Thread 对象的结束先行发生于 join() 方法返回。
1280
1280
1281
1281
# 十一、线程安全
1282
1282
1283
- 多个线程不管以何种方式访问某个类,并在在主调代码中不需要进行同步 ,都能表现正确的行为。
1283
+ 多个线程不管以何种方式访问某个类,并且1在主调代码中不需要进行同步 ,都能表现正确的行为。
1284
1284
1285
1285
线程安全有以下几种实现方式:
1286
1286
Original file line number Diff line number Diff line change @@ -694,7 +694,7 @@ private void swim(int k) {
694
694
}
695
695
```
696
696
697
- 类似地,当一个节点比子节点来得小,也需要不断地向下进行比较和交换操作,把这种操作称为下沉。一个节点如果有两个子节点,应当与两个子节点中最大那么节点进行交换 。
697
+ 类似地,当一个节点比子节点来得小,也需要不断地向下进行比较和交换操作,把这种操作称为下沉。一个节点如果有两个子节点,应当与两个子节点中最大那个节点进行交换 。
698
698
699
699
<div align =" center " > <img src =" ../pics//72f0ff69-138d-4e54-b7ac-ebe025d978dc.png " width =" 400 " /> </div ><br >
700
700
@@ -796,7 +796,7 @@ public class HeapSort<T extends Comparable<T>> extends Sort<T> {
796
796
797
797
对于堆排序,由于要对 N 个节点进行下沉操作,因此复杂度为 NlogN。
798
798
799
- 堆排序时一种原地排序 ,没有利用额外的空间。
799
+ 堆排序是一种原地排序 ,没有利用额外的空间。
800
800
801
801
现代操作系统很少使用堆排序,因为它无法利用局部性原理进行缓存,也就是数组元素很少和相邻的元素进行比较。
802
802
@@ -1123,7 +1123,7 @@ public class ArrayStack<Item> implements MyStack<Item> {
1123
1123
1124
1124
### 2. 链表实现
1125
1125
1126
- 需要使用链表的头插法来实现,因为头插法中最后压入栈的元素在链表的开头,它的 next 指针指向前一个压入栈的元素,在弹出元素时就可以通过 next 指针遍历到前一个压入栈的元素从而让这个元素称为新的栈顶元素 。
1126
+ 需要使用链表的头插法来实现,因为头插法中最后压入栈的元素在链表的开头,它的 next 指针指向前一个压入栈的元素,在弹出元素时就可以通过 next 指针遍历到前一个压入栈的元素从而让这个元素成为新的栈顶元素 。
1127
1127
1128
1128
``` java
1129
1129
public class ListStack <Item> implements MyStack<Item > {
Original file line number Diff line number Diff line change @@ -143,7 +143,7 @@ if (uniqueInstance == null) {
143
143
}
144
144
```
145
145
146
- uniqueInstance 采用 volatile 关键字修饰也是很有必要的。 ` uniqueInstance = new Singleton(); ` 这段代码其实是分为三步执行。
146
+ uniqueInstance 采用 volatile 关键字修饰也是很有必要的, ` uniqueInstance = new Singleton(); ` 这段代码其实是分为三步执行:
147
147
148
148
1 . 为 uniqueInstance 分配内存空间
149
149
2 . 初始化 uniqueInstance
@@ -219,7 +219,14 @@ public enum Singleton {
219
219
}
220
220
```
221
221
222
- 该实现在多次序列化再进行反序列化之后,不会得到多个实例。而其它实现,为了保证不会出现反序列化之后出现多个实例,需要使用 transient 修饰所有字段,并且实现序列化和反序列化的方法。
222
+ ``` html
223
+ firstName
224
+ secondName
225
+ secondName
226
+ secondName
227
+ ```
228
+
229
+ 该实现在多次序列化再进行反序列化之后,不会得到多个实例。而其它实现需要使用 transient 修饰所有字段,并且实现序列化和反序列化的方法。
223
230
224
231
该实现可以防止反射攻击。在其它实现中,通过 setAccessible() 方法可以将私有构造函数的访问级别设置为 public,然后调用构造函数从而实例化对象,如果要防止这种攻击,需要在构造函数中添加防止多次实例化的代码。该实现是由 JVM 保证只会实例化一次,因此不会出现上述的反射攻击。
225
232
You can’t perform that action at this time.
0 commit comments