1. 程式人生 > >ExecutorService常用方法和newFixedThreadPool建立固定大小的執行緒池

ExecutorService常用方法和newFixedThreadPool建立固定大小的執行緒池

1、ExecutorService:

是一個介面,繼承了Executor:

public interface ExecutorService extends Executor {
}
2、Executor:

而Executor亦是一個介面,該介面只包含了一個方法:

void execute(Runnable command);
3、Executors:

該類是一個輔助類,此包中所定義的 Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 類的工廠和實用方法。

此類支援以下各種方法:

• 建立並返回設定有常用配置字串的 ExecutorService 的方法。 • 建立並返回設定有常用配置字串的 ScheduledExecutorService 的方法。 • 建立並返回“包裝的”ExecutorService 方法,它通過使特定於實現的方法不可訪問來禁用重新配置。 • 建立並返回 ThreadFactory 的方法,它可將新建立的執行緒設定為已知的狀態。 • 建立並返回非閉包形式的 Callable 的方法,這樣可將其用於需要 Callable 的執行方法中。 4、建立ExecutorService的方法:
newFixedThreadPool()

建立一個可重用固定執行緒數的執行緒池,以共享的無界佇列方式來執行這些執行緒。

5、ExecutorService的方法:

shutdown

void shutdown()
啟動一次順序關閉,執行以前提交的任務,但不接受新任務。如果已經關閉,則呼叫沒有其他作用。 
丟擲:
- 如果安全管理器存在並且關閉,此 ExecutorService 可能操作某些不允許呼叫者修改的執行緒(因為它沒有保持RuntimePermission("modifyThread")),或者安全管理器的checkAccess方法拒絕訪問。

啟動一次順序關閉,執行以前提交的任務,但不接受新任務。如果已經關閉,則呼叫沒有其他作用。

awaitTermination

boolean awaitTermination(long timeout,
                         TimeUnit unit)
                         throws InterruptedException
請求關閉、發生超時或者當前執行緒中斷,無論哪一個首先發生之後,都將導致阻塞,直到所有任務完成執行。 
引數:
timeout- 最長等待時間
unit- timeout 引數的時間單位
返回:
如果此執行程式終止,則返回true;如果終止前超時期滿,則返回false
丟擲:

請求關閉、發生超時或者當前執行緒中斷,無論哪一個首先發生之後,都將導致阻塞,直到所有任務完成執行。既是等待所有子執行緒執行結束。

execute

void execute(Runnable command)
在未來某個時間執行給定的命令。該命令可能在新的執行緒、已入池的執行緒或者正呼叫的執行緒中執行,這由Executor實現決定。 

在未來某個時間執行給定的命令。該命令可能在新的執行緒、已入池的執行緒或者正呼叫的執行緒中執行,這由 Executor 實現決定。

submit

提交一個 Runnable 任務用於執行,並返回一個表示該任務的 Future。該 Future 的get方法在成功完成時將會返回null。 

提交一個 Runnable 任務用於執行,並返回一個表示該任務的 Future。該 Future 的 get 方法在成功 完成時將會返回 null。

6、下面是相關的使用例子:
public class ExecutorServiceTest {

    public static void main(String[] args) throws IOException, InterruptedException {
        // 建立一個固定大小的執行緒池
        ExecutorService service = Executors.newFixedThreadPool(3);
        for (int i = 0; i < 10; i++) {
            System.out.println("建立執行緒" + i);
            Runnable run = new Runnable() {
                @Override
                public void run() {
                    System.out.println("啟動執行緒");
                }
            };
            // 在未來某個時間執行給定的命令
            service.execute(run);
        }
        // 關閉啟動執行緒
        service.shutdown();
        // 等待子執行緒結束,再繼續執行下面的程式碼
        service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
        System.out.println("all thread complete");
    }
}

可以發現執行緒被迴圈建立,但是啟動執行緒卻不是連續的,而是由ExecutorService決定的。

相關推薦

ExecutorService常用方法newFixedThreadPool建立固定大小執行

1、ExecutorService: 是一個介面,繼承了Executor: public interface ExecutorService extends Executor { } 2、Executor: 而Executor亦是一個介面,該介面只包含了一個方法: void exe

[C++]固定大小執行

執行緒池模型 執行緒池是併發程式設計中常用的模型。 執行緒是一種非常寶貴的資源,建立、銷燬執行緒都是非常消耗時間的操作,所以我們的一個思路是在程式start up的時候,建立一個儲存有多個執行緒的快取,這樣程式執行時就不會頻繁的發生建立和銷燬執行緒的操作,從

Java中Executors類中幾種建立各型別執行方法及例項

Executors:提供了一系列靜態工廠方法用於建立各種執行緒池。 1.Executors.newCachedThreadPool建立可變執行緒池 如果執行緒池長度超過處理需要,可靈活回收空閒執行緒,若無可回收,則新建執行緒。核心執行緒池大小為0,最大為Integer.MA

帶日誌計時等功能的執行

帶日誌和計時等功能的執行緒池 歡迎關注作者部落格 簡書傳送門 前言   我們先來聊聊ThreadPoolExecutor的拓展。 擴充套件ThreadPoolExecutor   在執行任務的執行緒中將呼叫beforeExecute和afterEx

c語言通過condmutex實現一個高效能執行

首先說明一下這篇文章其實和我另一篇文章很像,只是另一篇只有一個執行緒,只要講述的是cond和mutex的使用,上面是基於c++實現的,封裝的稍微好一些,路徑: https://blog.csdn.net/FlayHigherGT/article/details/83830956 而下面是

Java多執行之Executor框架手寫簡易的執行

目錄 Java多執行緒之一執行緒及其基本使用 Java多執行緒之二(Synchronized) Java多執行緒之三volatile與等待通知機制示例 執行緒池 什麼是執行緒池 執行緒池一種執行緒使用模式,執行緒池會維護多個執行緒,等待著分配可併發執行的任務,當有任務需要執行緒執行時

使用無限大小執行 newCachedThreadPool 可能遇到的問題

看一段測試程式碼:  [java] view plain copy  print? package com.wenniuwuren.concurrent;   import java.util.concurrent.ExecutorService;   i

Executors建立ExecutorService執行)的常用方法

一、執行緒池的建立 JDK中提供了4個可過載的構造方法來建立一個執行緒池,當然萬變不離其中,引數少的構造方法將使用預設的引數呼叫引數多的構造方法。如下為其中兩個構造方法是,第一個構造方法將呼叫第二個構造方法: 構造方法一: public ThreadPool

Javascript - ExtJs - 常用方法屬性

taf 事件處理 代數 調用 lap ont .cn view html模板 常用方法和屬性(Common methods and attributes) 獲取 get(x) x是元素的ID || dom元素對象 || ExtElement對象 將參數所指轉化為Ex

使用jQuery操作DOM的常用方法節點

taf dto query 末尾 ont 獲得 ndt true jquery操作 1.常見方法 css(“屬性”,”屬性值”); //設置單個樣式 css({屬性1:屬性值1,屬性2:屬性值3...}); //設置多個樣式 addClass(“樣式名”); //追加單個樣

Ajax技術之XMLHttpRequest(二)【XMLHttpRequest常用方法屬性】

tro 沒有 body htm 事件 thead 指定 response date 一、XMLHttpRequest中常用的方法: (1)open()方法:用於設置進行異步請求目標的URL、請求方法以及其他參數信息。 函數原型:open("method","URL",asy

json常用方法本地存儲方法

方式 oca [ ] 鍵值對 本地存儲 tro 刪除cookie fun ice 1、JSON.parse()【把json字符串解析成json對象】 2、JSON.stringify()【把json對象中解析成json字符串】 <script> le

ExecutorService——shutdown方法awaitTermination方法

ExecutorService的關閉shutdown和awaitTermination為介面ExecutorService定義的兩個方法,一般情況配合使用來關閉執行緒池。 方法簡介shutdown方法:平滑的關閉ExecutorService,當此方法被呼叫時,ExecutorService停止接收新的任務

express 常用方法外掛

總結express框架中常用的方法及第三方外掛 express.static('./www') 載入靜態檔案 let router=express.Router(); 建立路由 express.logger() 列印日誌資訊 cookie-parser / cookie-session 身份認證 u

js中Object物件常用方法屬性

1、屬性 Object.prototype.writable:預設為false Object.prototype.enumerable:預設為false Object.prototype.configurable:預設為false Object.prototype.constructor:用

Composer 常用方法命令

//設定中國映象 方法一: 修改 composer 的全域性配置檔案(推薦方式) 開啟命令列視窗(windows使用者)或控制檯(Linux、Mac 使用者)並執行如下命令: composer config -g repo.packagist composer https://packa

PyQt之下拉列表框(QComboBOX)的常用方法訊號

PyQt之下拉列表框(QComboBOX)的常用方法和訊號 QComboBox是一個集按鈕和下拉選項於一體的控制元件。 一、QComboBox類中的常用方法 addItem(): 新增一個下拉選項 addItems(): 從列表中新增下拉選項 Clear():

PyQt5之按鈕類控制元件(QAbstractButton)的常用方法訊號

PyQt5之按鈕類控制元件(QAbstractButton)的常用方法和訊號 在PyQt中QAbestractButton是所有按鈕控制元件的基類,提供了按鈕的通用性功能,但該類是抽象的無法進行例項化,必須由其他的按鈕類整合QAbstracButton來實現不同的功能,不同的表現形式。

PyQt5之多行文字框(QtextEdit)類中的常用方法訊號

PyQt5之QtextEdit類中的常用方法和訊號 一、QTextEdit類中的常用方法 setPlainText(): 設定多行文字框的內容。 toPlainText(): 返回多行文字框的文字內容。 setHtml(): 設定多行文

PyQt之單行文字框(QLineEdit)類中的常用方法訊號

QLineEdit類中的常用方法和訊號 一、QLineEdit類中的常用方法 setAlignment(): 按固定方式對齊文字: Qt.AlignLeft:水平方向靠左對齊 Qt.AlignRight:水平方向靠右對齊 Qt.AlignCenter:水平方向居