码迷,mamicode.com
首页 > 编程语言 > 详细

java executor

时间:2018-09-14 18:28:01      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:tail   java虚拟机   hotspot   方法   程序   多线程程序   本地   也会   sdn   

在 java.util.concurrent 包中的 ExecutorService 的实现就是壹個线程池的实现

任务的委托(Task Delegation)

壹旦线程把任务委托给 ExecutorService,该线程就会继续执行与运行任务无关的其它任务。

Executor框架的两级调度模型

在HotSpot VM的线程模型中,Java线程被一对一映射为本地操作系统线程。Java线程启动时会创建一个本地操作系统线程;当Java线程终止时,这个操作系统线程也会被回收。操作系统会调用所有线程并将他们分配给可用的CPU。

可以将此种模式分为两层,在上层,Java多线程程序通常把应用程序分解为若干任务,然后使用用户级的调度器(Executor框架)讲这些任务映射为固定数量的线程;在底层,操作系统内核将这些线程映射到硬件处理器上

 

技术分享图片

当使用 ExecutorService 完毕之后,我们应该关闭它,这样才能保证线程不会继续保持运行状态。 
举例来说,如果你的程序通过 main() 方法启动,并且主线程退出了你的程序,如果你还有壹個活动的 ExecutorService 存在于你的程序中,那么程序将会继续保持运行状态。存在于 ExecutorService 中的活动线程会阻止Java虚拟机关闭。
为了关闭在 ExecutorService 中的线程,你需要调用 shutdown() 方法。ExecutorService 并不会马上关闭,而是不再接收新的任务,壹但所有的线程结束执行当前任务,ExecutorServie 才会真的关闭。所有在调用 shutdown() 方法之前提交到 ExecutorService 的任务都会执行。
如果你希望立即关闭 ExecutorService,你可以调用 shutdownNow() 方法。这個方法会尝试马上关闭所有正在执行的任务,并且跳过所有已经提交但是还没有运行的任务。但是对于正在执行的任务,是否能够成功关闭它是无法保证的,有可能他们真的被关闭掉了,也有可能它会壹直执行到任务结束。这是壹個最好的尝试。

参考

https://www.cnblogs.com/study-everyday/archive/2017/04/20/6737428.html

https://www.cnblogs.com/fengsehng/p/6048610.html

https://blog.csdn.net/bairrfhoinn/article/details/16848785

java executor

标签:tail   java虚拟机   hotspot   方法   程序   多线程程序   本地   也会   sdn   

原文地址:https://www.cnblogs.com/zecdllg/p/9647987.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!