Java多线程的中断操作

InterruptedException

如果一个线程处于阻塞、限期等待或无限期等待状态时,调用该线程的interrupt()方法中断线程,就会抛出InterruptedException,从而提前结束该线程;(注意:不能中断IO阻塞和Synchronized锁阻塞)

Interupted
  • 如果一个线程的run()方法执行一个循环体,并且循环体中没有会抛出InterruptedException的操作(如sleep()),那么该线程调用interrupted()就无法中断线程;
  • 由于一个线程调用interrupt()会设置线程中断标志,该标志可以通过interrupted()来获取;因此可以在run()方法的循环体中以该标志来判断线程是否处于中断状态,以结束线程。
Executor中断操作
  1. ExecutorshutDown()会等待所有线程执行完毕之后再关闭;而调用shutDownNow(),相当于调用每个线程的interrupt()方法,中断所有线程;
  2. 如果只想中断Executor中的一个线程,可以使用submit()提交一个线程,该方法返回一个Future<?>对象,通过调用该对象的cancel(true)方法中断线程。

原文:大专栏  Java多线程的中断操作


猜你喜欢

转载自www.cnblogs.com/wangziqiang123/p/11645304.html