关于shutdown和shutdownNow区别在这https://blog.csdn.net/lq_91/article/details/81294767
这里只是说一下shutdownNow()的问题;
调用 Executor 的 shutdown() 方法会等待线程都执行完毕之后再关闭,但是如果调用的是 shutdownNow() 方法,则相当于调用每个线程的 interrupt() 方法。
注意红字的话,其实调用了shutdownNow方法后。系统会对线程池里所有的线程执行interrupt方法,所以对于interrupt 如何中断线程和这个是一样的,
所以,当某一线程调用了sleep后,执行shutdownNow()只是打断了该线程的sleep,该线程会退出sleep,并抛出异常,而不是结束线程; 如果catch中有对异常处理,则继续处理异常并继续往下执行。(若想直接中断线程,可以把抛异常catch放在循环外面)