ExecutorService常用方法和newFixedThreadPool建立固定大小的執行緒池
1、ExecutorService:
2、Executor:
3、Executors:
4、建立ExecutorService的方法:
5、ExecutorService的方法:
6、下面是相關的使用例子:
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()
啟動一次順序關閉,執行以前提交的任務,但不接受新任務。如果已經關閉,則呼叫沒有其他作用。
丟擲:
SecurityException - 如果安全管理器存在並且關閉,此 ExecutorService 可能操作某些不允許呼叫者修改的執行緒(因為它沒有保持 RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒絕訪問。
啟動一次順序關閉,執行以前提交的任務,但不接受新任務。如果已經關閉,則呼叫沒有其他作用。
awaitTermination
boolean awaitTermination(long timeout,
TimeUnit unit)
throws InterruptedException
請求關閉、發生超時或者當前執行緒中斷,無論哪一個首先發生之後,都將導致阻塞,直到所有任務完成執行。
引數:
timeout - 最長等待時間
unit - timeout 引數的時間單位
返回:
如果此執行程式終止,則返回 true;如果終止前超時期滿,則返回 false
丟擲:
InterruptedException - 如果等待時發生中斷
請求關閉、發生超時或者當前執行緒中斷,無論哪一個首先發生之後,都將導致阻塞,直到所有任務完成執行。既是等待所有子執行緒執行結束。
execute
void execute(Runnable command)
在未來某個時間執行給定的命令。該命令可能在新的執行緒、已入池的執行緒或者正呼叫的執行緒中執行,這由 Executor實現決定。
引數:
command - 可執行的任務
丟擲:
RejectedExecutionException - 如果不能接受執行此任務。
NullPointerException - 如果命令為 null
在未來某個時間執行給定的命令。該命令可能在新的執行緒、已入池的執行緒或者正呼叫的執行緒中執行,這由 Executor 實現決定。
submit
Future<?> submit(Runnable task)
提交一個 Runnable 任務用於執行,並返回一個表示該任務的 Future。該 Future 的 get 方法在成功 完成時將會返回 null。
引數:
task - 要提交的任務
返回:
表示任務等待完成的 Future
丟擲:
RejectedExecutionException - 如果任務無法安排執行
NullPointerException - 如果該任務為 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決定的。
2、Executor:
3、Executors:
4、建立ExecutorService的方法:
5、ExecutorService的方法:
6、下面是相關的使用例子:
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()
啟動一次順序關閉,執行以前提交的任務,但不接受新任務。如果已經關閉,則呼叫沒有其他作用。
丟擲:
SecurityException - 如果安全管理器存在並且關閉,此 ExecutorService 可能操作某些不允許呼叫者修改的執行緒(因為它沒有保持 RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒絕訪問。
啟動一次順序關閉,執行以前提交的任務,但不接受新任務。如果已經關閉,則呼叫沒有其他作用。
awaitTermination
boolean awaitTermination(long timeout,
TimeUnit unit)
throws InterruptedException
請求關閉、發生超時或者當前執行緒中斷,無論哪一個首先發生之後,都將導致阻塞,直到所有任務完成執行。
引數:
timeout - 最長等待時間
unit - timeout 引數的時間單位
返回:
如果此執行程式終止,則返回 true;如果終止前超時期滿,則返回 false
丟擲:
InterruptedException - 如果等待時發生中斷
請求關閉、發生超時或者當前執行緒中斷,無論哪一個首先發生之後,都將導致阻塞,直到所有任務完成執行。既是等待所有子執行緒執行結束。
execute
void execute(Runnable command)
在未來某個時間執行給定的命令。該命令可能在新的執行緒、已入池的執行緒或者正呼叫的執行緒中執行,這由 Executor實現決定。
引數:
command - 可執行的任務
丟擲:
RejectedExecutionException - 如果不能接受執行此任務。
NullPointerException - 如果命令為 null
在未來某個時間執行給定的命令。該命令可能在新的執行緒、已入池的執行緒或者正呼叫的執行緒中執行,這由 Executor 實現決定。
submit
Future<?> submit(Runnable task)
提交一個 Runnable 任務用於執行,並返回一個表示該任務的 Future。該 Future 的 get 方法在成功 完成時將會返回 null。
引數:
task - 要提交的任務
返回:
表示任務等待完成的 Future
丟擲:
RejectedExecutionException - 如果任務無法安排執行
NullPointerException - 如果該任務為 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決定的。
相關文章
- Android執行緒管理之ExecutorService執行緒池Android執行緒
- 執行緒的建立及執行緒池執行緒
- Java實戰001-執行緒池ExecutorServiceJava執行緒
- 執行緒池的建立和使用,執行緒池原始碼初探(篇一)執行緒原始碼
- Java執行緒池newCachedThreadPool()與newFixedThreadPool()區別 | BaeldungJava執行緒thread
- 執行緒池建立執行緒的過程執行緒
- Java 執行緒建立與常用方法Java執行緒
- 執行緒和執行緒池執行緒
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- 執行緒池建立方式執行緒
- Android的執行緒和執行緒池Android執行緒
- 執行緒池的五種狀態及建立執行緒池的幾種方式執行緒
- 執行緒池建立的幾種方式執行緒
- 多執行緒-執行緒池的概述和使用執行緒
- Java面試必問之執行緒池的建立使用、執行緒池的核心引數、執行緒池的底層工作原理Java面試執行緒
- 使用CreateThreadPool建立執行緒池thread執行緒
- 淺談執行緒池(上):執行緒池的作用及CLR執行緒池執行緒
- 如何設定tomcat執行緒池大小?Tomcat執行緒
- 小夥子,你懂執行緒池的建立嗎?執行緒
- Java 執行緒池的建立過程分析Java執行緒
- java建立執行緒池的幾中方式Java執行緒
- SpringBoot執行緒池和Java執行緒池的實現原理Spring Boot執行緒Java
- Java多執行緒-執行緒池ThreadPoolExecutor構造方法和規則Java執行緒thread構造方法
- 多執行緒程式設計ExecutorService用法執行緒程式設計
- Java執行緒池總結和常用開源庫的使用Java執行緒
- 淺談執行緒池(中):獨立執行緒池的作用及IO執行緒池執行緒
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- 通俗易懂,各常用執行緒池執行的-流程圖執行緒流程圖
- Java執行緒池二:執行緒池原理Java執行緒
- 執行緒池和Executor框架執行緒框架
- 多執行緒【執行緒池】執行緒
- 執行緒 執行緒池 Task執行緒
- 【JAVA併發第二篇】Java執行緒的建立與執行,執行緒狀態與常用方法Java執行緒
- Android 執行緒優化之執行緒池shutdown方法Android執行緒優化
- Java 執行緒池獲取池中所有執行緒列表的方法Java執行緒
- 多執行緒:執行緒池理解和使用總結執行緒
- 《Java 高階篇》七:執行緒和執行緒池Java執行緒
- 執行緒和執行緒池的理解與java簡單例子執行緒Java單例