diff --git a/blogs/Java/并发/Java 并发编程线程基础.md b/blogs/Java/并发/Java 并发编程线程基础.md index 20a30bd..c12a350 100644 --- a/blogs/Java/并发/Java 并发编程线程基础.md +++ b/blogs/Java/并发/Java 并发编程线程基础.md @@ -11,6 +11,7 @@ Java 并发编程线程基础 5. 让出 CPU 执行权的 yield 方法 6. 线程中断 7. 线程死锁 +8. 守护线程与用户线程 #### 线程的创建与运行 @@ -155,3 +156,10 @@ public static boolean interrupted() { 那么如何避免死锁呢? +要想避免死锁,只需要破坏掉至少一个构成死锁的条件即可,但是目前只有请求并持有和环路等待条件是可以被破坏的。 + +造成死锁的原因其实和申请资源的顺序有很大关系,使用资源申请的有序性原则就可以避免死锁。 + +#### 守护线程与用户线程 + +Java 中的线程分为两类,分别是 daemon 线程(守护线程)和 user 线程(用户线程)。JVM 在运行用户线程的同时,还运行着很多守护线程,比如有垃圾回收线程。那么守护线程和用户线程有什么区别呢?区别之一是当最后一个用户线程结束时,JVM 正常退出,而不管当前是否有守护线程,也就是说守护线程是否结束并不影响 JVM 的退出。 \ No newline at end of file