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