建立執行緒池方法
儘管executors提供了四種執行緒池建立的方式,但為了實現某些特定的需求,可以自己建立執行緒池。如在阿里的程式設計規範使用executors建立執行緒時,一般會報錯,並提示以下資訊:
執行緒池不允許使用executors去建立,而是通過threadpoolexecutor的方式,這樣的處理方式讓寫的同學更加明確執行緒池的執行規則,規避資源耗盡的風險。 說明:executors各個方法的弊端:positive example 1:1)newfixedthreadpool和newsinglethreadexecutor:
主要問題是堆積的請求處理佇列可能會耗費非常大的記憶體,甚至oom。
2)newcachedthreadpool和newscheduledthreadpool:
主要問題是執行緒數最大數是integer.max_value,可能會建立數量非常多的執行緒,甚至oom。
scheduledexecutorservice executorservice =
newscheduledthreadpoolexecutor(1
,new
basicthreadfactory.builder()
.namingpattern
("example-schedule-pool-%d").
daemon
(true).
build()
);
positive example 2:
threadfactory namedthreadfactory =
newthreadfactorybuilder()
.setnameformat
("demo-pool-%d").
build()
;//common thread pool
executorservice pool =
newthreadpoolexecutor(5
,200
,0l, timeunit.milliseconds,
newlinkedblockingqueue
(1024
), namedthreadfactory,
newthreadpoolexecutor.abortpolicy()
);pool.
execute((
)-> system.out.
println
(thread.
currentthread()
.getname()
)); pool.
shutdown()
;//gracefully shutdown
positive example 3:
"userthreadpool"
class
="org.springframework.scheduling.concurrent.threadpooltaskexecutor"
>
name
="corepoolsize"
value
="10"
/>
name
="maxpoolsize"
value
="100"
/>
name
="queuecapacity"
value
="2000"
/>
name
="rejectedexecutionhandler"
>
local
="rejectedexecutionhandler"
/>
property
>
bean
>
//in code
userthreadpool.
execute
(thread)
;
自定義執行緒池
有些時候 jdk自帶的cachedthreadpool fixedthreadpool等執行緒池完成不了我們業務的需求時 可以用threadpoolexecutorg構造自定義的執行緒池。public class usethreadpoolexecutor1 這段 會首先執行任務1,然後把2 3 4...
自定義執行緒池
自定義執行緒池建立api 執行緒池建立通過juc的介面 executor 實現,平時我們使用其實現類 threadpoolexecutor 實現自定義執行緒池。常用建構函式 public threadpoolexecutor int corepoolsize,int maximumpoolsize,...
自定義執行緒池
版本一 usr bin env python coding utf 8 import queue import threading class threadpool object def init self,max num 20 self.queue queue.queue max num for ...