Java單例模式簡單嗎?
Javasingl
如何優(yōu)雅的使用和理解線程池?你怎么看?
要想很好地理解和使用java線程池,需要掌握并發(fā)編程的基礎知識,并仔細閱讀和學習線程池API的所有官方文檔。在這里,線程池的優(yōu)雅使用要點總結如下,:。
1.弄清楚你想用線程池做什么。例如,您的目標是將同步API轉換為異步API,還是希望并發(fā)請求多個外部服務,或者減少線程的創(chuàng)建和銷毀以處理用戶請求。
2.根據(jù)你的實際項目需求,配置線程池的參數(shù),包括corePoolSize、maximumPoolSize、阻塞隊列、keepAliveTime、線程工廠和飽和策略(或者RejectedExecutionHandler)。
3.根據(jù)您的應用程序特征部署線程池。有些后臺服務應用適合在啟動時創(chuàng)建線程池,在應用執(zhí)行過程中不會修改線程池。有時,應用程序適合臨時創(chuàng)建線程池和提交任務,并在使用后立即銷毀它們。
4.當您決定停止使用線程池時,您應該調(diào)用shutdown()來優(yōu)雅地關閉線程池。關閉可以保證之前已經(jīng)提交給線程池的任務不會被丟棄,從而保證數(shù)據(jù)安全。
5.調(diào)用shutdown時,此時線程池可能正在執(zhí)行任務,但是提交任務的入口是關閉的。如果需要等待線程池完全終止,則需要調(diào)用awaitTerminate來等待線程池完成隊列中的所有任務,并在返回之前將其清理干凈。AwaitTerminate返回成功,線程池確實清理干凈了。
綜上所述,線程池按照創(chuàng)建(構造方法)、提交任務(執(zhí)行)、關閉、等待清算的順序調(diào)用API,這樣使用線程池才優(yōu)雅。要用好java線程池,最大化優(yōu)化器的性能,可以參考我官方賬號里的分析文章。
