當前位置:編程學習大全網 - 源碼下載 - 如何優雅的關閉線程池?

如何優雅的關閉線程池?

線程池是系統資源,這篇文章主要介紹如何優雅關閉線程池

相關API:

Runtime.addShutdownHook解釋

如果妳想在jvm關閉的時候進行內存清理、對象銷毀等操作,或者僅僅想起個線程然後這個線程不會退出,妳可以使用Runtime.addShutdownHook。

這個方法的作用就是在JVM中增加壹個關閉的鉤子。當程序正常退出、系統調用 System.exit方法或者虛擬機被關閉時才會執行系統中已經設置的所有鉤子,當系統執行完這些鉤子後,JVM才會關閉。所謂鉤子,就是壹個已初始化但並不啟動的線程。JVM退出通常通過兩種事件。

程序正常退出,例如最後壹個非守護進程退出、使用System.exit()退出等

程序異常退出,例如使用Ctrl+C觸發的中斷、用戶退出或系統關閉等系統事件等 , 詳情見官方文檔:/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

  • 上一篇:中國夢源代碼
  • 下一篇:貴州到深圳源代碼
  • copyright 2024編程學習大全網