Java執行程序服務類型

ExecutorService功能是Java 5附帶的。它擴展了Executor接口,并提供了線程池功能來執行異步簡短任務。

使用Java 6提供的ExecutorService接口有五種異步執行任務的方法。

ExecutorService execService = Executors.newCachedThreadPool();

這種方法的方法將創建一個線程池,該線程池會根據需要創建新線程,但是在可用之前會重用以前構造的線程。 這些池通常將提高執行許多短期異步任務的程序的性能。 如果沒有可用的現有線程,則將創建一個新線程并將其添加到池中。 60秒鐘未使用的線程將終止并從緩存中刪除。

ExecutorService execService = Executors.newFixedThreadPool(10);

這種方法的方法創建了一個線程池,該線程池可重用固定數量的線程。 創建的nThreads將在運行時處于活動狀態。 如果在所有線程都處于活動狀態時提交了其他任務,則它們將在隊列中等待,直到某個線程可用為止。

ExecutorService execService = Executors.newSingleThreadExecutor();

這種方法的方法將創建一個執行器,該執行器使用在無限制隊列上運行的單個工作線程。 確保任務按順序執行,并且在任何給定時間都不會激活一項以上的任務。

ExecutorService的方法:

execute(Runnable):在將來的某個時間執行給定命令。

Submit(Runnable): Submit方法返回一個表示執行任務的Future對象。 如果任務正確完成,則Future Object返回null。

shutdown():啟動有序關閉,在該關閉中執行先前提交的任務,但不接受任何新任務。 如果已關閉,則調用不會產生任何其他影響。

shutdownNow():嘗試停止所有正在執行的任務,暫停正在等待的任務的處理,并返回正在等待執行的任務的列表。
除了盡最大努力嘗試停止處理正在執行的任務之外,沒有任何保證。 例如,典型的實現將通過Thread.interrupt取消,因此任何無法響應中斷的任務都可能永遠不會終止。

下面是一個示例應用程序:

步驟1:建立已完成的專案

創建一個Maven項目,如下所示。 (可以使用Maven或IDE插件來創建它)。

第2步:創建新任務

通過實現如下所示的Runnable接口(創建線程)來創建新任務。 TestTask類指定將要執行的業務邏輯。

package com.otv.task;import org.apache.log4j.Logger;/*** @author onlinetechvision.com* @since 24 Sept 2011* @version 1.0.0**/
public class TestTask implements Runnable {private static Logger log = Logger.getLogger(TestTask.class);private String taskName;public TestTask(String taskName) {this.taskName = taskName;}public void run() {try {log.debug(this.taskName + " is sleeping...");Thread.sleep(3000);log.debug(this.taskName + " is running...");} catch (InterruptedException e) {e.printStackTrace();}}public String getTaskName() {return taskName;}public void setTaskName(String taskName) {this.taskName = taskName;}}

步驟3:使用newCachedThreadPool創建TestExecutorService

通過使用方法newCachedThreadPool創建TestExecutorService。 在這種情況下,將在運行時指定創建的線程數。

package com.otv;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import com.otv.task.TestTask;/*** @author onlinetechvision.com* @since 24 Sept 2011* @version 1.0.0**/
public class TestExecutorService {public static void main(String[] args) {ExecutorService execService = Executors.newCachedThreadPool();execService.execute(new TestTask("FirstTestTask"));execService.execute(new TestTask("SecondTestTask"));execService.execute(new TestTask("ThirdTestTask"));execService.shutdown();}
}

運行TestExecutorService時,輸出將如下所示:

24.09.2011 17:30:47 DEBUG (TestTask.java:21) - SecondTestTask is sleeping...
24.09.2011 17:30:47 DEBUG (TestTask.java:21) - ThirdTestTask is sleeping...
24.09.2011 17:30:47 DEBUG (TestTask.java:21) - FirstTestTask is sleeping...
24.09.2011 17:30:50 DEBUG (TestTask.java:23) - ThirdTestTask is running...
24.09.2011 17:30:50 DEBUG (TestTask.java:23) - FirstTestTask is running...
24.09.2011 17:30:50 DEBUG (TestTask.java:23) - SecondTestTask is running...

步驟4:使用newFixedThreadPool創建TestExecutorService

通過使用方法newFixedThreadPool創建TestExecutorService。 在這種情況下,將在運行時指定創建的線程數。

package com.otv;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import com.otv.task.TestTask;/*** @author onlinetechvision.com* @since 24 Sept 2011* @version 1.0.0**/
public class TestExecutorService {public static void main(String[] args) {ExecutorService execService = Executors.newFixedThreadPool(2);execService.execute(new TestTask("FirstTestTask"));execService.execute(new TestTask("SecondTestTask"));execService.execute(new TestTask("ThirdTestTask"));execService.shutdown();}
}

運行TestExecutorService時,在完成FirstTestTask和SecondTestTask的執行之后,將執行ThirdTestTask。 輸出將被視為
下面:

24.09.2011 17:33:38 DEBUG (TestTask.java:21) - FirstTestTask is sleeping...
24.09.2011 17:33:38 DEBUG (TestTask.java:21) - SecondTestTask is sleeping...
24.09.2011 17:33:41 DEBUG (TestTask.java:23) - FirstTestTask is running...
24.09.2011 17:33:41 DEBUG (TestTask.java:23) - SecondTestTask is running...
24.09.2011 17:33:41 DEBUG (TestTask.java:21) - ThirdTestTask is sleeping...
24.09.2011 17:33:44 DEBUG (TestTask.java:23) - ThirdTestTask is running...

步驟5:使用newSingleThreadExecutor創建TestExecutorService

通過使用方法newSingleThreadExecutor創建TestExecutorService。 在這種情況下,僅創建一個線程,并按順序執行任務。

package com.otv;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import com.otv.task.TestTask;/*** @author onlinetechvision.com* @since 24 Sept 2011* @version 1.0.0**/
public class TestExecutorService {public static void main(String[] args) {ExecutorService execService = Executors.newSingleThreadExecutor();execService.execute(new TestTask("FirstTestTask"));execService.execute(new TestTask("SecondTestTask"));execService.execute(new TestTask("ThirdTestTask"));execService.shutdown();}
}

當運行TestExecutorService時,FirstTestTask的執行完成后,將執行SecondTestTask和ThirdTestTask。 輸出將如下所示:

24.09.2011 17:38:21 DEBUG (TestTask.java:21) - FirstTestTask is sleeping...
24.09.2011 17:38:24 DEBUG (TestTask.java:23) - FirstTestTask is running...
24.09.2011 17:38:24 DEBUG (TestTask.java:21) - SecondTestTask is sleeping...
24.09.2011 17:38:27 DEBUG (TestTask.java:23) - SecondTestTask is running...
24.09.2011 17:38:27 DEBUG (TestTask.java:21) - ThirdTestTask is sleeping...
24.09.2011 17:38:30 DEBUG (TestTask.java:23) - ThirdTestTask is running...

步驟6:參考資料

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html
http://tutorials.jenkov.com/java-util-concurrent/executorservice.html

參考: Online Technology Vision博客中來自我們JCG合作伙伴 Eren Avsarogullari的Java Executor服務類型 。


翻譯自: https://www.javacodegeeks.com/2012/08/java-executor-service-types.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372192.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372192.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372192.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL的主動優化和被動優化_MySQL“被動”性能優化匯總!

年少不知優化苦,遇坑方知優化難。 ——村口王大爺本文內容導圖如下:我之前有很多文章都在講性能優化的問題,比如下面這些:當然,本篇也是關于性能優化的,那性能優化就應該一把梭子嗎?還是要符合一…

python2

一、管理庫的安裝 安裝pip 提示報錯:安裝pip提示No module named setuptools Windows環境下Python默認是沒有安裝setuptools這個模塊的,這也是一個第三方模塊。下載地址為http://pypi.python.org/pypi/setuptools。下載后直接運行ez_setup.py 參考地址&…

Java Mybatis

Mybatis轉載于:https://www.cnblogs.com/leading-index/p/6853031.html

Java例外:java lang NoSuchMethodError

如果查看錯誤消息java.lang.NoSuchMethodError,您可能會理解Java虛擬機正在嘗試向我們表明您調用的方法在類或接口中不可用。 您還可能在執行沒有公共static void main()方法的類時拋出此錯誤。要了解其背后的原因,請閱讀本文。 …

【圖】最短路徑——Floyed算法和Dijkstra算法

最短路徑問題(floyed.cpp dijkstra.cpp) 題目描述平面上有n個點(n<100)&#xff0c;每個點的坐標均在-10000&#xff5e;10000之間。其中的一些點之間有連線。若有連線&#xff0c;則表示可從一個點到達另一個點&#xff0c;即兩點間有通路&#xff0c;通路的距離為兩點間的…

java的empty_Java Stack empty()方法與示例

堆棧類empty()方法empty()方法在java.util包中可用。empty()方法用于檢查此堆棧是否為空。empty()方法是一個非靜態方法&#xff0c;只能通過類對象訪問&#xff0c;如果嘗試使用類名稱訪問該方法&#xff0c;則會收到錯誤消息。在檢查空狀態時&#xff0c;empty()方法不會引發…

Java并發– CyclicBarrier示例

Java中的CyclicBarrier是JDK 5中java.util.Concurrent包中引入的同步器&#xff0c;以及其他并發實用程序&#xff08;如Counting Semaphore &#xff0c; BlockingQueue &#xff0c; ConcurrentHashMap等&#xff09;。CyclicBarrier與CountDownLatch類似&#xff0c;我們在上…

java i o總結_Java I/O 總結

一、IO流的三種分類方式1.按流的方向分為&#xff1a;輸入流和輸出流2.按流的數據單位不同分為&#xff1a;字節流和字符流3.按流的功能不同分為&#xff1a;節點流和處理流二、IO流的四大抽象類&#xff1a;字符流&#xff1a;Reader Writer字節流&#xff1a;InputStream(讀數…

try...catch 語句

一般情況下&#xff0c;我們很少用到 try...catch 語句&#xff0c;但是有時候為了測試代碼中的錯誤&#xff0c;也有可能會用到。小白我也在工作中用到過。那么好的程序設計&#xff0c;什么時候會用到呢&#xff1f; try...catch 一般用來捕獲宿主對象或者ECMAScript拋出的異…

用Mockito回答

在編寫單元測試時 &#xff0c;必須牢記不要依賴外部組件。 為了避免這種情況&#xff0c;我們使用了模擬框架&#xff0c;對我來說&#xff0c;最容易使用的是Mockito 。 在本文中&#xff0c;我們將看到在Mockito中使用的一種“高級”技術&#xff0c;可以使用Answer接口在模…

java三板斧_Java 枚舉使用三板斧

Java 枚舉使用三板斧1 定義public enum CountryEnums {ONE(1,"韓"),TWO(2,"魏"),THREE(3,"楚"),FOUR(4,"燕"),FIVE(5,"趙"),SIX(6,"齊");private Integer retCode;private String retMsg;// 枚舉的構造方法是 pri…

假裝這些是MyEclipse的快捷鍵(1)

Java快捷鍵 Alt / 代碼自動補全Alt Shift S 功能菜單 Ctrl 1 代碼自動修正Ctrl / 單行注釋/取消Ctrl O 查看類的所有方法Ctrl T 查看類的集成架構圖Ctrl Shift / 多行注釋Ctrl Shift \ 取消多行注釋Ctrl Shift F 代碼格式化轉載于:https://www.cnblogs.com/swordt…

JasperReports JSF插件用例–簡單列表報告

這是JasperReports JSF插件系列的第一篇“用例文章” &#xff0c;我將專注于一個簡單的需求&#xff0c;并且我將進一步深入。 起點是我們已經為圖書商店完成的項目設置&#xff0c;我將向其中添加一個列表&#xff0c;其中包含在數據庫中注冊的其他圖書&#xff0c;該列表也將…

2016.10.17先占坑

2016.10.17先占坑轉載于:https://www.cnblogs.com/amurzet/p/5978986.html

ER圖流程圖

ER圖&#xff1a;ER圖分為實體、屬性、關系三個核心部分。實體是長方形體現&#xff0c;而屬性則是橢圓形&#xff0c;關系為菱形。 圖書館管理系統流程圖&#xff08;圖片源于網上&#xff09;&#xff1a;對于程序員來說&#xff0c;我們要知道&#xff1a;整個系統中&#x…

php源碼仿三一重工,織夢仿三一重工業大學氣企業網站php源碼

★模板引薦★源碼稱呼&#xff1a;仿三一重工業大學氣企業網站php源碼仿三一重工業大學氣企業網站php源碼&#xff0c;嘗試完備無錯&#xff0c;兼容合流欣賞器。模板包括安置證明&#xff0c;并包括嘗試數據。本模板鑒于DEDECms 5.7 GBK安排&#xff0c;須要 UTF-8版本的請本人…

接觸Jenkins(Hudson)API,第2部分

這篇文章從本教程的第1部分繼續。 已經快一年了&#xff0c;但是我終于有時間重新審視我為與Jenkins api交互而編寫的一些代碼。 我已經使用了部分工作來幫助管理許多Jenkins構建服務器&#xff0c;主要是保持插件同步以及將作業從一臺機器移動到另一臺機器。 在本文中&#xf…

php樹莓派魔鏡,用樹莓派和顯示器制作一面“魔鏡”

所需要的材料一臺顯示器一塊和顯示器大小相同的雙面鏡一些2*4米的細木條樹莓派機器必要組件(電源、HDMI線、usb無線網卡、鍵盤)木工工具(鋸子、磨砂機、螺絲刀)螺絲、液態釘子選一個合適的顯示器鏡子的大小完全由顯示器的類型和大小決定&#xff0c;所以我希望得到一個盡量大的…

【數字圖像處理】[3]--直方圖規范化

【數字圖像處理】[3]--直方圖規范化直方圖規范化出現的原因是因為直方圖均衡只能產生出固定的圖像&#xff0c;不滿足于需求&#xff0c;有時我們需要讓直方圖變成特定的直方圖&#xff0c;于是有了直方圖規范化原理&#xff1a;可能只看公式沒什么感覺&#xff0c;我們來舉一個…

JavaFX 2.0布局窗格– GridPane

毫無疑問&#xff0c; GridPane是JavaFX 2.0中功能最強大&#xff0c;最靈活的布局窗格。 它在由行和列組成的靈活網格中布置其子項&#xff0c;與Swing的GridBagLayout或HTML的表格模型非常相似。 這種方法使該窗格非常適合于任何形式的表單&#xff08;例如網站上的聯系表單&…