自定義執行緒池

2021-09-18 02:36:34 字數 2031 閱讀 6518

建立執行緒池方法

儘管executors提供了四種執行緒池建立的方式,但為了實現某些特定的需求,可以自己建立執行緒池。如在阿里的程式設計規範使用executors建立執行緒時,一般會報錯,並提示以下資訊:

執行緒池不允許使用executors去建立,而是通過threadpoolexecutor的方式,這樣的處理方式讓寫的同學更加明確執行緒池的執行規則,規避資源耗盡的風險。 說明:executors各個方法的弊端:

1)newfixedthreadpool和newsinglethreadexecutor:

主要問題是堆積的請求處理佇列可能會耗費非常大的記憶體,甚至oom。

2)newcachedthreadpool和newscheduledthreadpool:

主要問題是執行緒數最大數是integer.max_value,可能會建立數量非常多的執行緒,甚至oom。

positive example 1:

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 ...