Java多线程ExecutorService.shutdown什么时候执行
2016-02-11 20:22
477 查看
原文链接4L大神
主线程和线程池之间没有直接关系,线程池使用自己的线程。生命周期也相互独立。
shutdown()可以理解为:主线程要求线程池关闭,但不会为此等待线程池执行完毕。
shutdown() 作为函数,当然是立即执行,也即是不再接受新任务了;但是它既不会强行终止正在执行的任务,也不会取消已经提交的任务。也就是说之前提交的5个任务,仍然会执行完毕,且跟主线程生命周期无关,也就是即便你直接在后面写上: if (1==1) return; 来立即结束主函数,你也会发现线程池的5个任务会顺利执行完毕。
另一个长得很像的函数是:
shutdownNow(),这个函数比shutdown()更狠,两点:
1、对于尚未执行的任务,全部取消掉;
2、对于正在执行的任务,发出interrupt()。
不过你的程序因为在发生异常时没有正确释放信号量,所以如果改为shutdownNow()会出问题:主线程死等。
主线程和线程池之间没有直接关系,线程池使用自己的线程。生命周期也相互独立。
shutdown()可以理解为:主线程要求线程池关闭,但不会为此等待线程池执行完毕。
shutdown() 作为函数,当然是立即执行,也即是不再接受新任务了;但是它既不会强行终止正在执行的任务,也不会取消已经提交的任务。也就是说之前提交的5个任务,仍然会执行完毕,且跟主线程生命周期无关,也就是即便你直接在后面写上: if (1==1) return; 来立即结束主函数,你也会发现线程池的5个任务会顺利执行完毕。
另一个长得很像的函数是:
shutdownNow(),这个函数比shutdown()更狠,两点:
1、对于尚未执行的任务,全部取消掉;
2、对于正在执行的任务,发出interrupt()。
不过你的程序因为在发生异常时没有正确释放信号量,所以如果改为shutdownNow()会出问题:主线程死等。
相关文章推荐
- 总结-Java何时需要使用多线程
- 20个非常有用的Java程序片段
- 蓝桥杯 算法训练 图形显示
- [Spring实战系列](16)面向切面编程(AOP)概述
- Java多线程通过多核CPU来提升速度--更快的执行
- JAVA的BigInteger
- JAVA中的File类
- Java Cookie使用Unicode编码中文
- Java EE 之 过滤器入门学习与总结(1)
- Java EE 之 过滤器入门学习与总结(1)
- 蓝桥杯 算法训练 排序
- Java的多线程之同步篇二:synchronized关键字
- java多线程 等待多个并发事件的完成
- 蓝桥杯 大小写转换
- eclipse自定义设置tab页切换快捷键
- spring前端显示
- 【慕课笔记】U4 多态 第3节 JAVA中的抽象类
- java基础总结 --- enum枚举的常量相关方法、自动售货机(状态模式)例子
- Java学习笔记5-泛型
- 在eclipese中编写servlet时出现“The import javax.servlet cannot be resolved”