/*執行緒池*/
/*第四種 獲取執行緒的方法:執行緒池*/
乙個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() : 建立固定大小的執行緒池,可以延遲或定時執行任務
1public
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 執行緒池
一,概念 池化技術 執行緒的執行是占用系統資源的,每個執行緒的誕生都需要有 建立 初始化 使用 銷毀 等步驟,為了避免多次重複的建立和銷毀執行緒利用率,提出了池化技術,先建立好程序放到程序池中,如果要使用程序了就從池裡面拿來用,用完之後就還回去。這就是池化技術 傳統 建立執行緒 使用執行緒 銷毀程序...
執行緒 執行緒池
執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後執行,主要實現 建立執行緒和管理執行緒,並且給執行緒分配任務。執行緒池中的執行緒是併發執行的。乙個比較簡單的執行緒池至少應包含執行緒池管理器 工作執行緒 任務列隊 任務介面等部分。其中執行緒池管理器的作用是建立 銷毀並管理...