關於java執行緒池

2021-07-29 01:44:20 字數 1184 閱讀 7300

假設初始化乙個執行緒池,核心執行緒池數(corepoolsize)是5,最大執行緒數(maxpoolsize)是10;初始化的時候執行緒池裡是空的。阻塞佇列裡面也沒有任務;當來了乙個任務時,執行緒池中初始化乙個執行緒,再來乙個任務就在初始化乙個,當執行緒數量達到5個時,第6個任務就會放到阻塞佇列中,如果其中乙個執行緒空閒了,就會從佇列中獲取第6個任務繼續執行;當任務產生的速度比消費的的速度快,阻塞佇列又滿了的時候,就會根據最大執行緒數去新建執行緒處理阻塞佇列裡的任務;當執行緒池中的執行緒達到最大執行緒數,阻塞佇列也滿了,需要通過自定義reject函式處理任務(rejectedexecutionhandler----拒絕策略);

corepoolsize

執行緒池中的核心執行緒數,當提交乙個任務時,執行緒池建立乙個新執行緒執行任務,直到當前執行緒數等於corepoolsize;如果當前執行緒數為corepoolsize,繼續提交的任務被儲存到阻塞佇列中,等待被執行;如果執行了執行緒池的prestartallcorethreads()方法,執行緒池會提前建立並啟動所有核心執行緒。

maximumpoolsize

執行緒池中允許的最大執行緒數。如果當前阻塞佇列滿了,且繼續提交任務,則建立新的執行緒執行任務,前提是當前執行緒數小於maximumpoolsize;

keepalivetime

worker和task的區別,worker是當前執行緒池中的執行緒,而task雖然是runnable,但是並沒有真正執行,只是被worker呼叫了run方法,後面會看到這部分的實現。

maximumpoolsize和corepoolsize的區別:這個概念很重要,maximumpoolsize為執行緒池最大容量,也就是說執行緒池最多能起多少worker。corepoolsize是核心執行緒池的大小,當corepoolsize滿了時,同時workqueue full(arraybolckqueue是可能滿的) 那麼此時允許新建worker去處理workqueue中的task,但是不能超過maximumpoolsize。超過corepoolsize之外的執行緒會在空閒超時後終止。

public class threadpooltest

}static class task implements runnable}}

這裡:通過executor.execute()方法提交的任務,必須實現runnable介面,該方式提交的任務不能獲取返回值,因此無法判斷任務是否執行成功;通過executorservice.submit()方法提交的任務,可以獲取任務執行完的返回值。

關於java 執行緒池相關

public class test threadpooltaskexecutor executor new threadpooltaskexecutor 配置核心執行緒數 executor.setcorepoolsize corecount 配置最大執行緒數 executor.setmaxpools...

Java執行緒池

executors類詳解 此包中所定義的 executor executorservice scheduledexecutorservice threadfactory 和 callable 類的工廠和實用方法。此類支援以下各種方法 建立並返回設定有常用配置字串的 executorservice 的...

Java執行緒池

一 執行緒池 單執行緒 public static void runsinglethreadpool public static void runsinglethreadpoolwithfactory private static class mythreadfactory implements t...