美文网首页基础原理
如何优雅的关闭线程池?

如何优雅的关闭线程池?

作者: 但时间也偷换概念 | 来源:发表于2019-01-05 17:54 被阅读114次

简介:

线程池是系统资源,这篇文章主要介绍如何优雅关闭线程池

相关API:

Runtime.addShutdownHook解释

如果你想在jvm关闭的时候进行内存清理、对象销毁等操作,或者仅仅想起个线程然后这个线程不会退出,你可以使用Runtime.addShutdownHook。

这个方法的作用就是在JVM中增加一个关闭的钩子。当程序正常退出、系统调用 System.exit方法或者虚拟机被关闭时才会执行系统中已经设置的所有钩子,当系统执行完这些钩子后,JVM才会关闭。所谓钩子,就是一个已初始化但并不启动的线程。JVM退出通常通过两种事件。

程序正常退出,例如最后一个非守护进程退出、使用System.exit()退出等

程序异常退出,例如使用Ctrl+C触发的中断、用户退出或系统关闭等系统事件等详情见官方文档:https://docs.oracle.com/javase/8/docs/api/index.html

Guava解释

google退出的open sdk,提供多类并发api。

实战案例:

上两篇文章讲了@Configuration @Bean @Import注入线程池Bean,还有ApplicationRunner 和 CommandLineRunner接口去实现容器启动完成事件驱动,所以结合起来举个例子,在项目中如何注入、优雅关闭线程池。

如上图。

1.通过@Configuration @Bean注解去注入一个线程池<componentThreadPool>。

2.将线程池注册到注册中心<ThreadPoolRegistrationCenter>

3.在Spring容器启动完成观察者模式中,利用ApplicationRunner接口提供的run方法,添加jvm hook钩子,以做到jvm退出时能够优雅关闭线程池。

其中用到了guava的<MoreExecutors.shutdownAndAwaitTermination>,jdk<Runtime.getRuntime().addShutdownHook>等API

相关文章

  • 如何优雅的关闭线程池?

    简介: 线程池是系统资源,这篇文章主要介绍如何优雅关闭线程池 相关API: Runtime.addShutdown...

  • 如何优雅关闭Java线程池

    现象描述 线上的定时任务使用了corntab来定时启动console应用,最近出现应用运行完成后,不自动关闭的情况...

  • 优雅的关闭线程池

    使shutdownNow法,可能会引起报错,使用shutdown方法可能会导致线程关闭不了。 所以当我们使shut...

  • 线程池的优雅关闭

    转自:https://www.jianshu.com/p/bdf06e2c1541 平时开发中,大家更多的关注的是...

  • 如何优雅的关闭Java线程池

    ⾯试中经常会问到,创建⼀个线程池需要哪些参数、线程池的工作原理,却很少会问到线程池如何安全关闭的。 也正是因为⼤家...

  • 如何优雅的关闭Java线程池

    面试中经常会问到,创建一个线程池需要哪些参数啊,线程池的工作原理啊,却很少会问到线程池如何安全关闭的。 也正是因为...

  • 如何优雅的关闭Java线程池

    原文:https://www.cnblogs.com/qingquanzi/p/9018627.html 本篇就以...

  • 线程池的优雅关闭实践

    平时开发中,大家更多的关注的是线程池的创建、任务的提交和执行。往往会忽略线程池的关闭,甚至忘记调用shutdown...

  • 关闭线程池 shutdown 和 shutdownNow 的区别

    本章分为两个议题 (1)如何正确关闭线程池 (2)shutdown 和 shutdownNow 的区别 1.线程池...

  • Java线程池的关闭

    一 java线程池关闭方法 1.1 shutdown void shutdown() 此方法关闭线程池不是直接关闭...

网友评论

    本文标题:如何优雅的关闭线程池?

    本文链接:https://www.haomeiwen.com/subject/gakdrqtx.html