1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-08-01 16:28:03 +08:00

Update Java并发基础常见面试题总结.md

This commit is contained in:
guide 2021-09-26 21:29:27 +08:00
parent 078f4aec25
commit a2479a7799

View File

@ -153,7 +153,7 @@ Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种
![RUNNABLE-VS-RUNNING](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3/RUNNABLE-VS-RUNNING.png) ![RUNNABLE-VS-RUNNING](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3/RUNNABLE-VS-RUNNING.png)
当线程执行 `wait()`方法之后,线程进入 **WAITING等待** 状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而 **TIME_WAITING(超时等待)** 状态相当于在等待状态的基础上增加了超时限制,比如通过 `sleeplong millis`方法或 `waitlong millis`方法可以将 Java 线程置于 TIMED WAITING 状态。当超时时间到达后 Java 线程将会返回到 RUNNABLE 状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到 **BLOCKED阻塞** 状态。线程在执行 Runnable 的`run()`方法之后将会进入到 **TERMINATED终止** 状态。 当线程执行 `wait()`方法之后,线程进入 **WAITING等待** 状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而 **TIMED_WAITING(超时等待)** 状态相当于在等待状态的基础上增加了超时限制,比如通过 `sleeplong millis`方法或 `waitlong millis`方法可以将 Java 线程置于 TIMED_WAITING 状态。当超时时间到达后 Java 线程将会返回到 RUNNABLE 状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到 **BLOCKED阻塞** 状态。线程在执行 Runnable 的`run()`方法之后将会进入到 **TERMINATED终止** 状态。
相关阅读:[挑错 |《Java 并发编程的艺术》中关于线程状态的三处错误](https://mp.weixin.qq.com/s/UOrXql_LhOD8dhTq_EPI0w) 。 相关阅读:[挑错 |《Java 并发编程的艺术》中关于线程状态的三处错误](https://mp.weixin.qq.com/s/UOrXql_LhOD8dhTq_EPI0w) 。
@ -250,7 +250,7 @@ Thread[线程 2,5,main]waiting get resource1
避免死锁就是在资源分配时,借助于算法(比如银行家算法)对资源分配进行计算评估,使其进入安全状态。 避免死锁就是在资源分配时,借助于算法(比如银行家算法)对资源分配进行计算评估,使其进入安全状态。
**安全状态**指的是系统能够按照某种进行推进顺序P1、P2、P3.....Pn来为每个进程分配所需资源直到满足每个进程对资源的最大需求使每个进程都可顺利完成。称<P1P2P3.....Pn>序列为安全序列。 **安全状态** 指的是系统能够按照某种进程推进顺序P1、P2、P3.....Pn来为每个进程分配所需资源直到满足每个进程对资源的最大需求使每个进程都可顺利完成。称<P1P2P3.....Pn>序列为安全序列。
我们对线程 2 的代码修改成下面这样就不会产生死锁了。 我们对线程 2 的代码修改成下面这样就不会产生死锁了。