File tree 1 file changed +14
-4
lines changed 1 file changed +14
-4
lines changed Original file line number Diff line number Diff line change @@ -370,16 +370,26 @@ hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返
370
370
371
371
## 30. 线程有哪些基本状态?
372
372
373
- 参考《Java 并发编程艺术》4.1.4节。
374
-
375
- Java 线程在运行的生命周期中的指定时刻只可能处于下面6种不同状态的其中一个状态。
373
+ Java 线程在运行的生命周期中的指定时刻只可能处于下面6种不同状态的其中一个状态(图源《Java 并发编程艺术》4.1.4节)。
376
374
377
375

378
376
379
- 线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示:
377
+ 线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示(图源《Java 并发编程艺术》4.1.4节) :
380
378
381
379

382
380
381
+
382
+
383
+ 由上图可以看出:
384
+
385
+ 线程创建之后它将处于 **NEW(新建)** 状态,调用 `start ()` 方法后开始运行,线程这时候处于 **READY(可运行)** 状态。可运行状态的线程获得了 cpu 时间片(timeslice)后就处于 **RUNNING(运行)** 状态。
386
+
387
+ > 操作系统隐藏 Java虚拟机(JVM)中的 RUNNABLE 和 RUNNING 状态,它只能看到 RUNNABLE 状态(图源:[HowToDoInJava](https:// howtodoinjava.com/):[Java Thread Life Cycle and Thread States](https://howtodoinjava.com/java/multi-threading/java-thread-life-cycle-and-thread-states/)),所以 Java 系统一般将这两个状态统称为 **RUNNABLE(运行中)** 状态 。
388
+
389
+ 
390
+
391
+ 当线程执行 `wait ()`方法之后,线程进入 **WAITING (等待)**状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而 **TIME_WAITING (超时等待)** 状态相当于在等待状态的基础上增加了超时限制,比如通过 `sleep(long millis)`方法或 `wait(long millis)`方法可以将 Java 线程置于 TIMED WAITING 状态。当超时时间到达后 Java 线程将会返回到 RUNNABLE 状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到 **BLOCKED (阻塞)** 状态。线程在执行 Runnable 的` run () `方法之后将会进入到 **TERMINATED(终止)** 状态。
392
+
383
393
## 31 关于 final 关键字的一些总结
384
394
385
395
final 关键字主要用在三个地方:变量、方法、类。
You can’t perform that action at this time.
0 commit comments