commit
6e667d6a7a
|
@ -403,7 +403,7 @@ JVM 为对象定义年龄计数器,经过 Minor GC 依然存活,并且能被
|
||||||
|
|
||||||
### 4.4 动态对象年龄判定
|
### 4.4 动态对象年龄判定
|
||||||
|
|
||||||
JVM 并不是永远地要求对象的年龄必须达到 MaxTenuringThreshold 才能晋升老年代,如果在 Survivor 区中相同年龄所有对象大小的总和大于 Survivor 空间的一半,则年龄大于或等于该年龄的对象可以直接进入老年代,无序等待 MaxTenuringThreshold 中要求的年龄。
|
JVM 并不是永远地要求对象的年龄必须达到 MaxTenuringThreshold 才能晋升老年代,如果在 Survivor 区中相同年龄所有对象大小的总和大于 Survivor 空间的一半,则年龄大于或等于该年龄的对象可以直接进入老年代,无须等待 MaxTenuringThreshold 中要求的年龄。
|
||||||
|
|
||||||
### 4.5 空间分配担保
|
### 4.5 空间分配担保
|
||||||
|
|
||||||
|
|
|
@ -258,9 +258,13 @@ public void func(String name) {
|
||||||
```java
|
```java
|
||||||
private Lock lock;
|
private Lock lock;
|
||||||
public int func(int value) {
|
public int func(int value) {
|
||||||
lock.lock();
|
try {
|
||||||
// ...
|
lock.lock();
|
||||||
lock.unlock();
|
// ...
|
||||||
|
|
||||||
|
}finally {
|
||||||
|
lock.unlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -383,7 +387,7 @@ Consumer4 is consuming product made by Consumer4...
|
||||||
|
|
||||||
**Executor 的中断操作**
|
**Executor 的中断操作**
|
||||||
|
|
||||||
Executor 避免对 Thread 对象的直接操作,但是使用 interrupt() 方法必须持有 Thread 对象。Executor 使用 shutdownNow() 方法来中断所有它里面的所有线程,shutdownNow() 方法会发送 interrupt() 调用给所有线程。
|
Executor 避免对 Thread 对象的直接操作,但是使用 interrupt() 方法必须持有 Thread 对象。Executor 使用 shutdownNow() 方法来中断它里面的所有线程,shutdownNow() 方法会发送 interrupt() 调用给所有线程。
|
||||||
|
|
||||||
如果只想中断一个线程,那么使用 Executor 的 submit() 而不是 executor() 来启动线程,就可以持有线程的上下文。submit() 将返回一个泛型 Futrue,可以在它之上调用 cancel(),如果将 true 传递给 cancel(),那么它将会发送 interrupt() 调用给特定的线程。
|
如果只想中断一个线程,那么使用 Executor 的 submit() 而不是 executor() 来启动线程,就可以持有线程的上下文。submit() 将返回一个泛型 Futrue,可以在它之上调用 cancel(),如果将 true 传递给 cancel(),那么它将会发送 interrupt() 调用给特定的线程。
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user