Java併發框架Executor
Executor:可管理Thread物件,它在客戶端和任務執行之間提供了一個間接層。它允許我們管理非同步任務的執行,而無需顯示的管理執行緒的生命週期。
建立執行緒池:
Executors類,提供了一系列工廠方法用於創先執行緒池,返回的執行緒池都實現了ExecutorService介面。
1、Executors.newCachedThreadPool():
CachedThreadPool:線上程的執行過程中通常會建立與所需數量相同的執行緒,然後在他回收舊執行緒時停止建立新執行緒。因此,它是合理的Executors首選。
public class TestExecutors {
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
cachedThreadPool.execute(new Thread( new TestThread("t1")));
cachedThreadPool.execute(new Thread( new TestThread("t2")));
cachedThreadPool.shutdown();
}
}
class TestThread implements Runnable{
String name;
public TestThread(String name){
this.name= name;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<5;i++){
System.out.println(name+":"+i);
}
}
}
輸出結果為:
t1:0
t1:1
t1:2
t1:3
t1:4
t2:0
t2:1
t2:2
t2:3
t2:4
2、Executors.newFixedThreadPool():
FixedThreadPool():使用了有限的執行緒集來執行所提交的事務。可以一次性預先執行代價高昂的執行緒分配,因而也就可以限制執行緒的數量了。此時,不需要為每個任務都固定的付出建立執行緒的開銷。在事件驅動的系統中,需要執行緒的事件處理器,通過直接從池中獲取執行緒,也可以儘快的得到服務。規定數目的執行緒處理所有任務,一旦有執行緒處理完了任務就會被用來處理新的任務(如果有的話)。新的執行緒加入後,如果正在執行的執行緒達到了上限,則會阻塞,直到有了空閒的執行緒來執行
public class TestExecutors {
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService exec = Executors.newFixedThreadPool(2);
for(int i = 0; i < 4; i++) {
exec.execute(new Thread( new TestThread("t"+i)));
}
exec.shutdown();
}
}
class TestThread implements Runnable{
String name;
public TestThread(String name){
this.name= name;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<2;i++){
System.out.println(name+":"+i);
}
}
}
輸出結果為:
t0:0
t0:1
t0:2
t0:3
t1:0
t2:0
t1:1
t2:1
t1:2
t2:2
t1:3
t2:3
t3:0
t4:0
t3:1
t4:1
t3:2
t4:2
t3:3
t4:3
同時只有兩個執行緒在執行
3、Executors.newSingleThreadPool():
SingleThreadPool:就像是執行緒數量為1的FixedThreadPool。向SingleThreadExecutor提交多個任務時,這些任務將排隊,每個任務都會在下一個任務開始之前執行結束,所有的任務都將使用相同的執行緒。採用SingleThreadExecutor來處理大量的執行緒時,可以確保時刻在任何執行緒中都只有唯一的任務在執行。在這種方式中,不需要再共享資源上處理同步。
public class TestExecutors {
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService exec = Executors.newSingleThreadExecutor();
for(int i = 0; i < 3; i++) {
exec.execute(new Thread( new TestThread("t"+i)));
}
exec.shutdown();
}
}
class TestThread implements Runnable{
String name;
public TestThread(String name){
this.name= name;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<4;i++){
System.out.println(name+":"+i);
}
}
}
輸出結果為:
t0:0
t0:1
t0:2
t0:3
t1:0
t1:1
t1:2
t1:3
t2:0
t2:1
t2:2
t2:3
都是在上一個執行緒執行完了在執行下一個執行緒
相關推薦
Java併發框架Executor
Executor:可管理Thread物件,它在客戶端和任務執行之間提供了一個間接層。它允許我們管理非同步任務的執行,而無需顯示的管理執行緒的生命週期。 建立執行緒池: Executors類,提供了一系列工廠方法用於創先執行緒池,返回的執行緒池都實現了Exec
Java併發框架Executor學習筆記
Java SE5的java.util.concurrent包中的執行器(Executor)將為你管理Thread物件,從而簡化了併發程式設計。Executor在客戶端和執行任務之間提供了一個間接層,Executor代替客戶端執行任務。Executor允許你管理非同步任務的
Java併發框架:Executor
介紹 隨著當今處理器中可用的核心數量的增加, 隨著對實現更高吞吐量的需求的不斷增長,多執行緒 API 變得非常流行。 Java 提供了自己的多執行緒框架,稱為 Executor 框架. 1. Executor 框架是什麼? Executor 框架包含一組用於有效管理
java併發程式設計--Executor框架以及Executors類的建立執行緒池方法
Eexecutor作為靈活且強大的非同步執行框架,其支援多種不同型別的任務執行策略,提供了一種標準的方法將任務的提交過程和執行過程解耦開發,基於生產者-消費者模式,其提交任務的執行緒相當於生產者,執行任務的執行緒相當於消費者,並用Runnab
【Java併發】Executor框架
Executor框架 Executor框架結構 ThreadPoolExecutor FixedThreadPool SingleThreadExecutor newCachedThreadPool Schedul
java併發程式設計--Executor框架
摘要: Eexecutor作為靈活且強大的非同步執行框架,其支援多種不同型別的任務執行策略,提供了一種標準的方法將任務的提交過程和執行過程解耦開發,基於生產者-消費者模式,其提交任務的執行緒相當於生產者,執行任務的執行緒相當於消費者,並用Runnable
Java併發程式設計-Executor框架之Callable和Future介面
在上一篇文章中我們已經瞭解了Executor框架進行執行緒管理,這篇文章將學習Executor框架的另一個特性,我們知道執行Runnable任務是沒有返回值得,但Executor可以執行併發任務並
Java併發框架:Executor簡析
一、簡介 很多剛剛接觸多執行緒的同學喜歡通過new Thread().start()來建立並啟動一個執行緒,在複雜的應用中這是一個很不好的習慣,這樣創建出來的執行緒往往缺乏有效的管理,容易造成各種各樣的問題並難以解決。當你為此感到困惑的時候,你就應該好好學習並
Java多執行緒程式設計---併發框架Executor
我們都知道,在JDK1.5之前,Java中要進行業務併發時,通常需要有程式設計師獨立完成程式碼實現,而當針對高質量Java多執行緒併發程式設計時,為防止死鎖等現象的出現,比如使用java之前的wait()、notify()和synchronized等,每每需要
Java併發程式設計 - Executor,Executors,ExecutorService, CompletionServie,Future,Callable
一、Exectuor框架簡介 Java從1.5版本開始,為簡化多執行緒併發程式設計,引入全新的併發程式設計包:java.util.concurrent及其併發程式設計框架(Executor框架)。 Executor框架是指ja
Java併發框架——AQS阻塞佇列管理(一)——自旋鎖
我們知道一個執行緒在嘗試獲取鎖失敗後將被阻塞並加入等待佇列中,它是一個怎樣的佇列?又是如何管理此佇列?這節聊聊CHL Node FIFO佇列。 在談到CHL Node FIFO佇列之前,我們先分析這種佇列的幾個要素。首先要了解的是自旋鎖,所謂自旋鎖即是某一執行緒去嘗試獲取某個
Java併發框架——AQS阻塞佇列管理(二)——自旋鎖優化
看Craig, Landin, and Hagersten發明的CLH鎖如何優化同步帶來的花銷,其核心思想是:通過一定手段將所有執行緒對某一共享變數輪詢競爭轉化為一個執行緒佇列且佇列中的執行緒各自輪詢自己的本地變數。這個轉化過程由兩個要點,一是構建怎樣的佇列&如何構建
深入理解Java併發框架AQS系列(三):獨佔鎖(Exclusive Lock)
[深入理解Java併發框架AQS系列(一):執行緒](https://www.cnblogs.com/xijiu/p/14396061.html) [深入理解Java併發框架AQS系列(二):AQS框架簡介及鎖概念](https://www.cnblogs.com/xijiu/p/14522224.html)
Java併發程式設計的藝術之十----Executor框架
1.Executor框架 1.1兩級排程模型 Java執行緒啟動時候會建立一個本地作業系統執行緒,當該java執行緒終止時,這個作業系統執行緒也會被回收。作業系統會排程所有執行緒並分配cpu。 上層,多執行緒程式通常把應用分解成若干個任務,然後Executor將任務對映為固定數量的
JAVA多執行緒(四) Executor併發框架向RabbitMQ推送訊息
github程式碼地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo 假設一個需求使用者點選某個頁面,我們後臺需要向MQ推送信資訊 1,模擬的MQ服務,我這邊使用RabbitMQ (關於MQ 傳送和監聽訊息可以
Java併發程式設計(5)-Executor執行緒排程框架解讀
文章目錄 一、Executor執行緒排程框架 1.1、什麼是執行緒排程框架 1.2、Executors 1.3、Executor 1.4、ExecutorService 1
Java併發程式設計系列之十五 Executor框架
Java使用執行緒完成非同步任務是很普遍的事,而執行緒的建立與銷燬需要一定的開銷,如果每個任務都需要建立一個執行緒將會消耗大量的計算資源,JDK 5之後把工作單元和執行機制區分開了,工作單元包括Runnable和Callable,而執行機制則由Executor框架提供
Java併發——Executor框架(二)
總結看過的資料,方便自己學習。 來源:https://blog.csdn.net/zxm490484080/article/details/80886243 前面學習了Executor框架的組成,Executor和ExecutorService的區別,以及ExecutorSe
Java併發——Executor框架(一)
對看過的資料進行了整理,方便自己學習 來源:https://www.cnblogs.com/love-Stefanie/p/6728228.html https://www.cnblogs.com/
Java併發---- Executor併發框架--ThreadToolExecutor類詳解(execute方法,關閉方法)
1、構造方法 2、原始碼詳解 執行緒池能夠複用執行緒,減少執行緒建立,銷燬,恢復等狀態切換的開銷,提高程式的效能。一個執行緒池管理了一組工作執行緒,同時它還包括了一個用於放置等待執行的任務的佇列。 ThreadPo