1.中断:每个线程都有一个boolean类型的中断状态,中断是一种协作机制。
public class Thread{ //中断目标线程 public void interrupt(){...} //返回目标线程的中断状态 public boolean isInterrupted(){...} //清除当前线程的中断状态,并返回它之前的值,清除中断状态的唯一方法 public static boolean interrupted(){...} ... }
2.阻塞库方法:
在线程阻塞情况下,检查线程何时中断,并在发现中断时提前返回。响应中断的操作包括:清楚中断状态,抛出InterruptedException,表示阻塞操作由于中断而提前结束。
Thread.sleep:线程进入休眠,保留持有的锁
Object.wait:当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的锁,使得其他线程能够访问。可以通过notify,notifyAll方法来唤醒等待的线程,使该线程进入锁的竞争池。
3.守护线程
守护线程:在JVM启动时创建的所有线程中,除了主线程以外,其他线程都是守护线程(例如垃圾回收器以及其他执行辅助工作的线程)。
当创建一个线程时,新线程将会继承创建它的线程的守护状态,在默认的情况下,主线程创建的所有线程都是普通线程。当JVM停止时,所有仍然存在的守护线程都将被抛弃——即不会执行finally代码块,也不会执行回卷栈,JVM直接退出。