初識執行緒池

2021-10-17 18:59:17 字數 3936 閱讀 1236

降低資源消耗

提高響應速度

提高執行緒的可管理性

首先繼承threadpoolexecutor

public

class

poolthread

extends

threadpoolexecutor

public

poolthread

(int corepoolsize,

int maximumpoolsize,

long keepalivetime, timeunit unit, blockingqueue

workqueue, threadfactory threadfactory)

public

poolthread

(int corepoolsize,

int maximumpoolsize,

long keepalivetime, timeunit unit, blockingqueue

workqueue, rejectedexecutionhandler handler)

public

poolthread

(int corepoolsize,

int maximumpoolsize,

long keepalivetime, timeunit unit, blockingqueue

workqueue, threadfactory threadfactory, rejectedexecutionhandler handler)

public

static

final integer core_pool_size =20;

public

static

final integer max_pool_size =

100;

public

static

final

long keep_alive =20;

blockingqueue

poolworkqueue;

public

void

run()}

);// close

threadpool.

shutdown()

; threadpool.

shutdownnow()

;}}

實現threadfactory介面,並且實現介面下的newthread(runnable r)方法,不用指定引數

private

static

class

defaultthreadfactory

implements

threadfactory

@override

public thread newthread

(runnable r)

}

當執行緒池的執行緒數達到最大執行緒數時,需要執行拒絕策略。

實現rejectedexecutionhandler介面,並實現rejectedexecution(runnable r, threadpoolexecutor executor)方法。

定長線程池(fixedthreadpool)

定時執行緒池(scheduledthreadpool )

可快取執行緒池(cachedthreadpool)

單執行緒化執行緒池(singlethreadexecutor)

原始碼分析

public

class

apublic

static executorservice newfixedthreadpool

(int nthreads, threadfactory threadfactory)

}

example

public

classb}

;// 3.向執行緒池提交任務

fixedthreadpool.

execute

(task);}

}

原始碼分析

public

class

apublic

scheduledthreadpoolexecutor

(int corepoolsize)

public

static scheduledexecutorservice newscheduledthreadpool

(int corepoolsize, threadfactory threadfactory)

public

scheduledthreadpoolexecutor

(int corepoolsize,

threadfactory threadfactory)

}

example

public

classb}

;// 3. 向執行緒池提交任務

scheduledthreadpool.

schedule

(task,

1, timeunit.seconds)

;// 延遲1s後執行任務

scheduledthreadpool.

scheduleatfixedrate

(task,10,

1000

,timeunit.milliseconds)

;// 延遲10ms後、每隔1000ms執行任務

}}

原始碼分析

public

class

apublic

static executorservice newcachedthreadpool

(threadfactory threadfactory)

}

example

public

classb}

;// 3. 向執行緒池提交任務

cachedthreadpool.

execute

(task);}

}

原始碼分析

public

class

apublic

static executorservice newsinglethreadexecutor

(threadfactory threadfactory)

}

example

public

classb}

;// 3. 向執行緒池提交任務

singlethreadexecutor.

execute

(task);}

}

executors的4個功能執行緒池雖然方便,但現在已經不建議使用了,而是建議直接通過使用threadpoolexecutor的方式,這樣的處理方式讓寫的同學更加明確執行緒池的執行規則,規避資源耗盡的風險。

其實executors的4個功能執行緒有如下弊端:

執行緒 執行緒池

執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後執行,主要實現 建立執行緒和管理執行緒,並且給執行緒分配任務。執行緒池中的執行緒是併發執行的。乙個比較簡單的執行緒池至少應包含執行緒池管理器 工作執行緒 任務列隊 任務介面等部分。其中執行緒池管理器的作用是建立 銷毀並管理...

執行緒 執行緒池

乙個簡單執行緒的建立和銷毀如下 與程序程序相比,執行緒是一種輕量級的工具,但是輕量並不代表沒有,它的建立和關閉依然需要花費時間,如果建立和銷毀的時間還大於執行緒本身完成的工作,那就會得不償失,甚至會造成out of memory。即使沒有,大量的執行緒 也會給gc帶來巨大的壓力。為了解決這樣的問題,...

mysql 執行緒池 c MySQL執行緒池

mysql執行緒池 在麼mysql中,執行緒池指的是用來管理處理mysql客戶端連線任務的執行緒的一種機制。如果把執行緒看做系統資源那麼執行緒池本質上是對系統資源的管理,對應作業系統來說執行緒的建立和銷毀是比較消耗系統資源的,頻繁的建立與銷毀執行緒必然給系統帶來不必要的資源浪費,特別是在高負載的情況...