Java线程池的shutdownNow()方法容易被忽略的地方

编程

shutdown()和shutdownNow()方法的区别相信一百度就能找到很多篇文章,但很多文章都说shutdownNow()会中断当前的任务,容易被误解为当前任务直接停止,实则不然。

注意“中断”的英文是“interrupt”,在java里指的是对线程发起interrupt()请求,interrupt()方法的作用可以去百度一下,并不会杀掉线程,只是中断线程的阻塞状态,例如中断线程的sleep()方法使线程不再睡眠。

如果你的程序中没有会抛出InterruptedException异常的方法,或者将会抛出InterruptedException()的方法进行try/catch,捕获到InterruptedException时只是打印日志并继续执行,那么当前任务将会执行到完成为止。

所以如果希望将当前任务也丢弃,用如下代码。

executorService.shutdown();

try {

executorService..awaitTermination(1, TimeUnit.MILLISECONDS);

} catch (InterruptedException e) {

e.printStackTrace();

}

以上是 Java线程池的shutdownNow()方法容易被忽略的地方 的全部内容, 来源链接: utcz.com/z/512305.html

回到顶部