InterruptedException
如果一个线程处于阻塞、限期等待或无限期等待状态时,调用该线程的interrupt()方法中断线程,就会抛出InterruptedException
,从而提前结束该线程;(注意:不能中断IO阻塞和Synchronized锁阻塞)
Interupted
- 如果一个线程的
run()
方法执行一个循环体,并且循环体中没有会抛出InterruptedException
的操作(如sleep()
),那么该线程调用interrupted()
就无法中断线程; - 由于一个线程调用
interrupt()
会设置线程中断标志,该标志可以通过interrupted()
来获取;因此可以在run()
方法的循环体中以该标志来判断线程是否处于中断状态,以结束线程。
Executor中断操作
Executor
的shutDown()
会等待所有线程执行完毕之后再关闭;而调用shutDownNow()
,相当于调用每个线程的interrupt()
方法,中断所有线程;- 如果只想中断
Executor
中的一个线程,可以使用submit()
提交一个线程,该方法返回一个Future<?>
对象,通过调用该对象的cancel(true)
方法中断线程。