多線程是為了能夠讓計算機資源合理的分配,對于處理不同的任務創(chuàng)建不同的線程進行處理,但是計算機創(chuàng)建一個線程或者銷毀一個線程所花費的也是比較昂貴的,有時候需要同時處理的事情比較多,就需要我們頻繁的進行線程的創(chuàng)建和銷毀,這樣花費的時間也是比較多的。為了解決這一問題,我們就可以引用線程池的概念。
所謂線程池就是將線程集中管理起來,當需要線程的時候,可以從線程池中獲取空閑的線程,這樣可以減少線程的頻繁創(chuàng)建與銷毀,節(jié)省很大的時間和減少很多不必要的操作。
在java中提供了ThreadPoolExecutor類來進行線程的管理,這個類繼承于AbstractExecutorService,而AbstractExecutorService實現(xiàn)了ExecutorService接口,我們可以使用ThreadPoolExecutor來進行線程池的創(chuàng)建。
在ThreadPoolExecutor的構造方法中,有多個參數(shù),可以配置不同的參數(shù)來進行優(yōu)化。這個類的源碼構造方法為:
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)其中每個參數(shù)代表的意義分別為
corePoolSize : 線程池中的核心線程數(shù)量,當線程池中當前的線程數(shù)小于這個配置的時候,如果有一個新的任務到來,即使線程池中還存在空閑狀態(tài)的線程,程序也會繼續(xù)創(chuàng)建一個新的線程放進線程池當中
maximumPoolSize: 線程池中的線程最大數(shù)量
keepAliveTime:當線程池中的線程數(shù)量大于配置的核心線程數(shù)量(corePoolSize)的時候,如果當前有空閑的線程,則當這個空閑線程可以存在的時間,如果在keepAliveTime這個時間點內沒有新的任務使用這個線程,那么這個線程將會結束,核心線程不會結束,但是如果配置了allowCoreThreadTimeOut = true,則當空閑時間超過keepAliveTime之后,線程也會被結束調,默認allowCoreThreadTimeOut = false,即表示默認情況下,核心線程會一直存在于線程池當中。
unit : 空閑線程保持連接時間(keepAliveTime)的時間單位
workQueue:阻塞的任務隊列,用來保存等待需要執(zhí)行的任務。
threadFactory :線程工廠,可以根據(jù)自己的需求去創(chuàng)建線程的對象,設置線程的名稱,優(yōu)先級等屬性信息。
handler:當線程池中存在的線程數(shù)超過設置的最大值之后,新的任務就會被拒絕,可以自己定義一個拒絕的策略,當新任務被拒絕之后,就會使用hander方法進行處理。
在java中也提供了Executors工具類,在這個工具類中提供了多個創(chuàng)建線程池的靜態(tài)方法,其中包含newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool、newSingleThreadExecutor等。但是他們每個方法都是創(chuàng)建了ThreadPoolExecutor對象,不同的是,每個對象的初始 參數(shù)值不一樣;
>>本文地址:http://liujunjsxg.cn/zhuanye/2020/48531.html
聲明:本站稿件版權均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉載。
1 您的年齡
2 您的學歷
3 您更想做哪個方向的工作?