请你解释一下什么是线程池(thread pool)?
?
在面向對象編程中,創建和銷毀對象是很費時間的,因為創建一個對象需要獲取內存資源或其他更多資源。在Java中更是如此,虛擬機將試圖跟蹤每一個對象,以便能夠在對象銷毀后進行垃圾回收。所以提高程序效率的一個手段就是盡可能減少創建和銷毀對象的次數,特別是一些很耗資源的對象的創建和銷毀,這就是“池化資源”技術產生的原因。
線程池顧名思義就是事先創建若干個可執行的線程放入一個池中,需要的時候就從池中獲取線程不用自行創建,使用完畢不用銷毀線程而是放回池中,從而減少創建和銷毀線程對象的開銷。
jdk1.5中的Executor接口定義一個執行線程的工具,它的子類即線程池接口是ExecutorService.要配置一個線程池是比較復雜的,尤其是對線程池的原理不是很清楚的情況下,因此在工具類Executors里面提供了一些靜態工廠方法,生成一些常用的線程池,如下:
newSingleThreadExecutor:創建一個單線程的線程池。這個線程池只有一個線程工作,也就是相當于單線程串行執行所有任務,如果這個唯一的線程因為異常結束,那么會有一個新的線程替代它,此線程池保證所有任務的執行順序按照任務提交的順序執行。
newFixedThreadPool:創建固定大小的線程池。每次提交一個任務就創建一個線程,直到線程數量達到線程池的最大大小。線程池的大小一旦達到最大值就會保持不變,如果某個線程因為執行異常而結束,那么線程池就會補充一個新的線程。
newCachedThreadPool:創建一個可緩存的線程池。入如果線程池的大小超過了處理任務所需要的線程,那么就會回收部分空閑的線程(60秒內不執行任務),當任務數值增加時,可以添加新線程來處理任務,該線程池不會對線程池大小進行限制,其大小完全依賴于操作系統或者JVM能夠創建的最大小線程數量。
newScheduledThreadPool:創建一個大小不限的線程池。此線程池支持定時以及周期性執行任務的需求。
總結
以上是生活随笔為你收集整理的请你解释一下什么是线程池(thread pool)?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis事务及watch使用示例
- 下一篇: Nginx 多进程模型是如何实现高并发的