java executor
2021-06-28 23:07
标签:tail java虚拟机 hotspot 方法 程序 多线程程序 本地 也会 sdn 在 java.util.concurrent 包中的 ExecutorService 的实现就是壹個线程池的实现 任务的委托(Task Delegation) 壹旦线程把任务委托给 ExecutorService,该线程就会继续执行与运行任务无关的其它任务。 在HotSpot VM的线程模型中,Java线程被一对一映射为本地操作系统线程。Java线程启动时会创建一个本地操作系统线程;当Java线程终止时,这个操作系统线程也会被回收。操作系统会调用所有线程并将他们分配给可用的CPU。 可以将此种模式分为两层,在上层,Java多线程程序通常把应用程序分解为若干任务,然后使用用户级的调度器(Executor框架)讲这些任务映射为固定数量的线程;在底层,操作系统内核将这些线程映射到硬件处理器上 当使用 ExecutorService 完毕之后,我们应该关闭它,这样才能保证线程不会继续保持运行状态。 参考 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.htmlExecutor框架的两级调度模型
举例来说,如果你的程序通过 main() 方法启动,并且主线程退出了你的程序,如果你还有壹個活动的 ExecutorService 存在于你的程序中,那么程序将会继续保持运行状态。存在于 ExecutorService 中的活动线程会阻止Java虚拟机关闭。
为了关闭在 ExecutorService 中的线程,你需要调用 shutdown() 方法。ExecutorService 并不会马上关闭,而是不再接收新的任务,壹但所有的线程结束执行当前任务,ExecutorServie 才会真的关闭。所有在调用 shutdown() 方法之前提交到 ExecutorService 的任务都会执行。
如果你希望立即关闭 ExecutorService,你可以调用 shutdownNow() 方法。这個方法会尝试马上关闭所有正在执行的任务,并且跳过所有已经提交但是还没有运行的任务。但是对于正在执行的任务,是否能够成功关闭它是无法保证的,有可能他们真的被关闭掉了,也有可能它会壹直执行到任务结束。这是壹個最好的尝试。
上一篇:ES6函数和数组
下一篇:http请求中的中文乱码问题