亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

ExecutorService的execute和submit的區別

2023-07-11 10:13:27
8
0
在看開源代碼的時候,發現ExecutorService類的子類提交異步任務有兩種方式,但不太了解它們的區別,于是便閱讀一下jdk源碼學習一番。
 
`ExecutorService` 是 Java 提供的用于管理和執行線程任務的接口。`execute()` 方法和 `submit()` 方法是 `ExecutorService` 接口中的兩種常用方法,它們的區別如下:
 
1. 返回值類型:`execute()` 方法沒有返回值,因此無法獲取任務執行的結果;而 `submit()` 方法返回一個 `Future` 對象,通過該對象可以獲取任務執行的結果。
 
2. 異常處理:`execute()` 方法無法處理任務執行過程中拋出的異常,異常將會被傳遞給調用方處理;而 `submit()` 方法可以通過調用 `Future.get()` 方法來獲取任務執行的結果,并且在方法中可以捕獲并處理任務執行過程中的異常。
 
3. 任務提交方式:`execute()` 方法只能接收 `Runnable` 對象,即無返回值的任務;而 `submit()` 方法既可以接收 `Runnable` 對象,也可以接收 `Callable` 對象,即有返回值的任務。
 
綜上所述,`execute()` 方法適用于簡單的異步任務執行,不需要關注任務的執行結果和異常處理;而`submit()` 方法更加靈活,可以提交有返回值的任務,并且能夠處理任務執行過程中的異常情況。根據具體的業務需求,選擇合適的方法來提交和執行任務。
 
在AbstractExecutorService類里面,可以看到submit的實現:
```java
/**
 * @throws RejectedExecutionException {@inheritDoc}
 * @throws NullPointerException       {@inheritDoc}
 */
public Future<?> submit(Runnable task) {
    if (task == null) throw new NullPointerException();
    RunnableFuture<Void> ftask = newTaskFor(task, null);
    execute(ftask);
    return ftask;
}
```
 
可以看到這種方式提交任務,最終也是通過調用`execute()` 方法的。因此,當我們使用ExecutorService提交定時任務的時候,如果不關注返回值的話,都用`execute()`比較好理解點。
0條評論
作者已關閉評論
t****m
98文章數
1粉絲數
t****m
98 文章 | 1 粉(fen)絲
t****m
98文章數
1粉絲(si)數
t****m
98 文(wen)章 | 1 粉絲
原創

ExecutorService的execute和submit的區別

2023-07-11 10:13:27
8
0
在看開源代碼的時候,發現ExecutorService類的子類提交異步任務有兩種方式,但不太了解它們的區別,于是便閱讀一下jdk源碼學習一番。
 
`ExecutorService` 是 Java 提供的用于管理和執行線程任務的接口。`execute()` 方法和 `submit()` 方法是 `ExecutorService` 接口中的兩種常用方法,它們的區別如下:
 
1. 返回值類型:`execute()` 方法沒有返回值,因此無法獲取任務執行的結果;而 `submit()` 方法返回一個 `Future` 對象,通過該對象可以獲取任務執行的結果。
 
2. 異常處理:`execute()` 方法無法處理任務執行過程中拋出的異常,異常將會被傳遞給調用方處理;而 `submit()` 方法可以通過調用 `Future.get()` 方法來獲取任務執行的結果,并且在方法中可以捕獲并處理任務執行過程中的異常。
 
3. 任務提交方式:`execute()` 方法只能接收 `Runnable` 對象,即無返回值的任務;而 `submit()` 方法既可以接收 `Runnable` 對象,也可以接收 `Callable` 對象,即有返回值的任務。
 
綜上所述,`execute()` 方法適用于簡單的異步任務執行,不需要關注任務的執行結果和異常處理;而`submit()` 方法更加靈活,可以提交有返回值的任務,并且能夠處理任務執行過程中的異常情況。根據具體的業務需求,選擇合適的方法來提交和執行任務。
 
在AbstractExecutorService類里面,可以看到submit的實現:
```java
/**
 * @throws RejectedExecutionException {@inheritDoc}
 * @throws NullPointerException       {@inheritDoc}
 */
public Future<?> submit(Runnable task) {
    if (task == null) throw new NullPointerException();
    RunnableFuture<Void> ftask = newTaskFor(task, null);
    execute(ftask);
    return ftask;
}
```
 
可以看到這種方式提交任務,最終也是通過調用`execute()` 方法的。因此,當我們使用ExecutorService提交定時任務的時候,如果不關注返回值的話,都用`execute()`比較好理解點。
文章來自個人專欄
文章 | 訂閱(yue)
0條評論
作者已關閉評論
作者已關閉評論
0
0