(通用之學習)執行緒池的那些事兒

2021-10-06 04:47:36 字數 2008 閱讀 5241

執行緒池

一般流程:建立執行緒、建立任務、執行任務、關閉執行緒(在一定時間後可自動關閉)

前情提要:如果併發的執行緒數量很多,並且每個執行緒都是執行乙個時間很短的任務就結束了,這樣頻繁建立執行緒就會大大降低系統的效率,因為頻繁建立執行緒和銷毀執行緒需要時間。

需求實現:執行緒池是乙個容納多個執行緒的容器,池中的執行緒可以反覆使用,省去了頻繁建立執行緒物件的操作,節省了大量的時間和資源。

優點

快取執行緒池

特點:長度無限制

任務加入後的執行流程:

判斷執行緒池是否存在空閒執行緒

存在則使用

不存在,則新建立乙個執行緒並放入執行緒池,然後使用

executorservice service = executors.

newcachedthreadpool()

;service.

execute

(new

runnable()

});service.

execute

(new

runnable()

});

此時使用快取執行緒池建立了兩個執行緒。

定長線程池

特點:長度是制定的數值

任務加入後的執行流程:

判斷執行緒是否存在空閒執行緒

存在則使用

不存在空閒執行緒,且執行緒池未滿的情況下,則建立執行緒並放入執行緒池,然後使用

不存在空閒執行緒,且執行緒池已滿的情況下,則等待執行緒池存在空閒執行緒

executorservice service = executors.

newfixedthreadpool(2

);service.

execute

(new

runnable()

catch

(interruptedexception e)}}

);service.

execute

(new

runnable()

catch

(interruptedexception e)}}

);

此時使用定長線程池建立了兩個執行緒。

單執行緒執行緒池

執行流程:

判斷執行緒池的那個執行緒是否空閒

空閒則使用

不空閒,則等待池中的單個執行緒空閒後使用

executorservice service = executors.

newsinglethreadexecutor()

;service.

execute

(new

runnable()

});service.

execute

(new

runnable()

});

此時使用單執行緒執行緒池執行了兩個執行緒。

週期定長線程池

概述:週期性的執行任務

新建立乙個執行緒池物件:

scheduledexecutorservice service = executors.

newscheduledthreadpool(2

);

主要方法:service.scheduleatfixedrate(引數1,引數2,引數3,引數4)

引數1:需要執行的任務

引數2:延遲執行的時長數字(第一次執行在什麼時間以後)

引數3:週期時長數字(每個多久執行一次)

引數4:時長數字的單位

例如:

service.

scheduleatfixedrate

(new

runnable()

},3,

1,timeunit.seconds)

;

任務描述:列印「鋤禾日當午」,延遲3s後執行,執行週期為1s。

(通用之學習)File類的那些事兒

是檔案和目錄 資料夾 路徑名的抽象表示。建立乙個檔案 假設在d盤下建立乙個.txt字尾的文字檔案,需要用到的方法是createnewfile 返回值為布林型別,如果之前不存在這樣乙個檔案,則新建立乙個檔案並返回true,否則返回false。file file newfile d a.txt syst...

執行緒的那些事兒zz

通過作業系統原理課,我們知道程序是系統資源分配的基本單位,執行緒是程式獨立執行的基本單位。執行緒有時候也被稱作小型程序,首先,這是因為多個執行緒之間是可以共享資源的 其次,多個執行緒之間的切換所花費的代價遠遠比程序低。在使用者態下,使用最廣泛的執行緒操作介面即為posix執行緒介面,即pthread...

執行緒池的那些事

一般我們進行執行緒的操作時,往往要建立乙個新的執行緒,執行完畢後再銷毀,等到有新的執行命令時,又得重新建立執行緒,如此一來顯得十分繁瑣,如果我們將之前執行過的執行緒不銷毀而是放入乙個池子中,當需要執行時直接引用它,這就能省下許多操作的步驟與時間,因此不會由於等待建立執行緒而延遲任務的執行,從而提高了...