Deamon线程:
Daemon线程是一种支持型线程,因为它主要被用作程序中后台调度以及支持性工作。这 意味着,当一个Java虚拟机中不存在非Daemon线程的时候,Java虚拟机将会退出。可以通过调 用Thread.setDaemon(true)将线程设置为Daemon线程
线程中断:
线程通过检查自身是否被中断来进行响应,线程通过方法isInterrupted()来进行判断是否 被中断,也可以调用静态方法Thread.interrupted()对当前线程的中断标识位进行复位。如果该 线程已经处于终结状态,即使该线程被中断过,在调用该线程对象的isInterrupted()时依旧会返 回false
线程通过中断操作和cancel()方法均可使线程得以终止
过期的suspend()、resume()和stop():
suspend()、resume()和stop()方法完成了线程的暂停、恢复和终 止
不建议使用的原因主要有:以suspend()方法为例,在调用后,线程不会释放已经占有的资 源(比如锁),而是占有着资源进入睡眠状态,这样容易引发死锁问题。同样,stop()方法在终结 一个线程时不会保证线程的资源正常释放,通常是没有给予线程完成资源释放工作的机会,
因此会导致程序可能工作在不确定状态下
线程间通信:
等待通知机制:
等待/通知机制,是指一个线程A调用了对象O的wait()方法进入等待状态,而另一个线程B调用了对象O的notify()或notifyAll()方法,线程A收到通知后从对象O的wait()方法返回,进而执行后续操作。两个线程通过对象O完成交互,而对象上的wait()和notify()的关系如同开关信号一样,用来完成等待方和通知方之间的交互工作
等待/通知的经典范式:
等待方原则:
1.获取对象的锁
2.如果条件不满足,那么调用对象的wait()方法,被通知后仍要检查条件
3.条件满足则执行对应的逻辑
通知方原则:
1.获得对象的锁
2.改变条件
3.通知所有等待在对象上的线程
来自<java并发编程>