10 執行緒池 執行緒排程

2022-09-16 23:24:28 字數 3427 閱讀 6370

/*執行緒池*/

/*第四種 獲取執行緒的方法:執行緒池*/

乙個executorservice,它使用執行緒池的可能的某個執行緒之一執行每個提交的任務,通常使用 executors 工廠方法配置(executorservice service = executors.newfixedthreadpool(5);)

執行緒池可以解決兩個不同問題:

1.由於減少了每個任務的開銷,它們通常可以在執行大量非同步任務時 提供增強的效能,

2.並且還可以提供繫結和管理資源(包括執行任務集時使用的執行緒)的方法。每個threadpoolexecutor 還維護著一些基本的統計資料,如完成的任務數。

為了便於跨大量上下文使用,此類提供了很多可調整的引數和擴充套件鉤子(hook).但是強烈建議 程式設計師使用較為方便的executors 工廠方法

executors.newcachedthreadpool() (無界線程池,可以進行自動線程**)

executors.newfixedthreadpool(int) (固定執行緒池大小)

executors.newsinglethreadexecutors (單個後台執行緒)

它們均為 大多數 使用場景預定了一些預設設定(一般不用修改)。

一、執行緒池:提供了乙個執行緒佇列,佇列中儲存著所有等待狀態的執行緒。避免了建立與銷毀額外開銷,提高了響應的速度

二、執行緒體系結構:

一、執行緒池:提供了乙個執行緒佇列,佇列中儲存著所有等待狀態的執行緒。避免了建立與銷毀額外開銷,提高了響應的速度

* *   二、執行緒體系結構:

* j**a.util.concurrent.executor:負責執行緒的使用與排程的根介面

* |--**executorservice 子介面:執行緒池的主要介面

* |--threadpoolexecutor 執行緒池的實現類

* |--scheduledexecutorserice 子介面:負責執行緒的排程

* |--scheduledthreadpoolexecutor : 繼承threadpoolexecutor,實現 scheduledexecutorservice

* * 三、工具類:executors

* executorservice newfixedthreadpool() : 建立固定大小的執行緒池

* executorservice newcachedthreadpool() : 快取執行緒池,執行緒池的數量不固定,可以根據需求自動的更改數量

* executorservice newsinglethreadpool() : 建立單個執行緒池 。執行緒池中只有乙個執行緒

* * scheduleexecutorservice new scheduledthreadpool() : 建立固定大小的執行緒池,可以延遲或定時執行任務

/*使用執行緒池的是三個步驟*/

1.建立 執行緒池 (根據要求可以建立不同的執行緒池)

2.放入任務 (將任務交給執行緒池中的執行緒去執行)

3.關閉執行緒池 (一般需平緩關閉(等正在執行任務的執行緒執行完畢後))

1/*2

* 一、執行緒池:提供了乙個執行緒佇列,佇列中儲存著所有等待狀態的執行緒。避免了建立與銷毀額外開銷,提高了響應的速度3*

4* 二、執行緒體系結構:

5* j**a.util.concurrent.executor:負責執行緒的使用與排程的根介面

6* |--**executorservice 子介面:執行緒池的主要介面

7* |--threadpoolexecutor 執行緒池的實現類

8* |--scheduledexecutorserice 子介面:負責執行緒的排程

9* |--scheduledthreadpoolexecutor : 繼承threadpoolexecutor,實現 scheduledexecutorservice

10*

11* 三、工具類:executors

12* executorservice newfixedthreadpool() : 建立固定大小的執行緒池

13* executorservice newcachedthreadpool() : 快取執行緒池,執行緒池的數量不固定,可以根據需求自動的更改數量

14* executorservice newsinglethreadpool() : 建立單個執行緒池 。執行緒池中只有乙個執行緒

15*

16* scheduleexecutorservice new scheduledthreadpool() : 建立固定大小的執行緒池,可以延遲或定時執行任務

17*

*/18

public

class

testthreadpool

36return

sum;37}

38});

39results.add(result);40}

4142

43//

3.獲取call 返回的 資料

44for(futureresult: results)

4748

//4.關閉執行緒池 (平緩的)(不關閉執行緒池,程式不會結束的)

49service.shutdown();

5051

52//

2.為執行緒池中的執行緒分配任務 (為5個執行緒分配10個任務)

53/*

54* for(int i = 0;i < 10; i++)

55*

56* //3.關閉 執行緒池(平緩的) service.shutdown();

57*/58}

59}6061

class threadpooldemo implements

runnable 70}

71 }

scheduleexecutorservice  new scheduledthreadpool()  :  建立固定大小的執行緒池,可以延遲或定時執行任務

1

public

class

testscheduledthreadpool

16 system.out.println(thread.currentthread().getname() + " : " +sum);

17return

sum;18}

19 }, 3, timeunit.seconds);

2021

//得到call 的結果

22system.out.println(result.get());23}

2425

//關閉執行緒池

26service.shutdown();

2728

}29 }

執行緒排程 執行緒池

1.每次new thread新建物件,效能查。2.執行緒缺乏統一管理,可能無限制的新建執行緒,相互競爭,有可能占用過多系統資源導致司機或oom out of memory 3.缺少更多的功能,如更多執行 定期執行 執行緒中斷。1.重用存在的執行緒,減少物件建立 消亡的開銷,效能好。2.可有效控制最大...

JUC練習10 執行緒池

一,概念 池化技術 執行緒的執行是占用系統資源的,每個執行緒的誕生都需要有 建立 初始化 使用 銷毀 等步驟,為了避免多次重複的建立和銷毀執行緒利用率,提出了池化技術,先建立好程序放到程序池中,如果要使用程序了就從池裡面拿來用,用完之後就還回去。這就是池化技術 傳統 建立執行緒 使用執行緒 銷毀程序...

執行緒 執行緒池

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