什么是中断?
在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的机制——中断。
- 中断只是一种协作机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现。若要中断一个线程,你需要手动调用该线程的interrupted方法,该方法也仅仅是将线程对象的中断标识设成true;接着你需要自己写代码不断地检测当前线程的标识位;如果为true,表示别的线程要求这条线程中断,此时究竟该做什么需要你自己写代码实现。
- 每个线程对象中都有一个标识,用于表示线程是否被中断;该标识位为true表示中断,为false表示未中断;
- 通过调用线程对象的interrupt方法将该线程的标识位设为true;可以在别的线程中调用,也可以在自己的线程中调用。
中断的相关方法
public void interrupt()
将调用者线程的中断状态设为true。public boolean isInterrupted()
判断调用者线程的中断状态。public static boolean interrupted
只能通过Thread.interrupted()调用。
它会做两步操作:- 返回当前线程的中断状态;
- 将当前线程的中断状态设为false;
暂停、继续、停止线程(已过时)
以下三个方法都是通过线程对象去调用。
suspend()
暂停调用者线程,只释放CPU执行权,不释放锁。
由于在不释放资源的情况下进入睡眠状态,容易产生死锁。因此已过时!resume()
恢复调用者线程,让他处于就绪状态。stop()
调用stop后,并不会保证资源被正确地释放,它会使程序处于不正确的状态下。