国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 通過代碼示例了解submit與execute的區別

通過代碼示例了解submit與execute的區別

2020-09-30 14:55沐春風-燕南飛 Java教程

這篇文章主要介紹了通過代碼示例了解submit與execute的區別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

(1)可以接受的任務類型

submit

通過代碼示例了解submit與execute的區別

execute

通過代碼示例了解submit與execute的區別

可以看出:

execute只能接受Runnable類型的任務

submit不管是Runnable還是Callable類型的任務都可以接受,但是Runnable返回值均為void,所以使用Future的get()獲得的還是null

(2)返回值

由Callable和Runnable的區別可知:

execute沒有返回值

submit有返回值,所以需要返回值的時候必須使用submit

(3)異常

1.execute中拋出異常

execute中的是Runnable接口的實現,所以只能使用try、catch來捕獲CheckedException,通過實現UncaughtExceptionHande接口處理UncheckedException

即和普通線程的處理方式完全一致

2.submit中拋出異常

不管提交的是Runnable還是Callable類型的任務,如果不對返回值Future調用get()方法,都會吃掉異常

先來看下Callable定義

public interface Callable<V> {
V call() throws Exception;
}

其中的call能夠拋出Exception異常,所以不管是CheckedException還是UncheckedException,直接拋出即可

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
 
public class ThreadExceptionTest {
  public static void main(String[] args) {
    ExecutorService executor = Executors.newCachedThreadPool();
    
    Future<Boolean> future = executor.submit(new CallableTask());
    try {
      future.get();
    } catch (InterruptedException e) {
      e.printStackTrace();
    } catch (ExecutionException e) {
      e.printStackTrace();
    }
    
    executor.shutdown();//必須不能忘,否則會一致卡在那里
  }
}
 
class CallableTask implements Callable<Boolean>{
  public Boolean call() throws Exception {
//    InputStream in = new FileInputStream(new File("xx.pdf"));
    int num = 3/0;
    return false;
  }
  
}

結果為:

?
1
2
3
4
5
6
7
8
9
10
11
12
java.util.concurrent.ExecutionException: java.lang.ArithmeticException: / by zero
  at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
  at java.util.concurrent.FutureTask.get(FutureTask.java:83)
  at my.ThreadExceptionTest.main(ThreadExceptionTest.java:21)
Caused by: java.lang.ArithmeticException: / by zero
  at my.CallableTask.call(ThreadExceptionTest.java:57)
  at my.CallableTask.call(ThreadExceptionTest.java:1)
  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
  at java.lang.Thread.run(Thread.java:619)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/brithToSpring/p/13632221.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美成人免费在线观看 | 午夜影院在线观看 | 欧美午夜精品久久久久久浪潮 | ww8888免费视频| 久久久久综合狠狠综合日本高清 | 亚洲精品久久久久久久久久久久久 | 午夜在线视频 | www.久久精品| 久久国产精品系列 | 成人福利在线观看 | 亚洲va欧美va天堂v国产综合 | 国产成人精品久久二区二区91 | 国产 欧美 日韩 一区 | 精品久久久久久久久久久久久久 | 精品国产精品 | 91久久精品一区二区二区 | 国产激情偷乱视频一区二区三区 | 欧美精品乱码久久久久久按摩 | 欧美精品成人 | 综合色区 | 视频一区中文字幕 | 中文字幕av网站 | 希岛爱理av一区二区三区 | 一级特黄毛片 | 日韩精品在线视频 | 精品视频一区二区三区在线观看 | 欧美成人高清视频 | 久久久一区二区 | 老熟女毛片 | 精一区二区 | 国产精品久久久久久 | 国产一级久久久久 | 天堂成人av| 国产一区二区三区 | 免费黄色在线 | 精品久久久久久 | 色黄网站 | 婷婷精品| 欧美一区二区三区在线观看视频 | 亚洲国产成人av好男人在线观看 | 日韩精品一二三 |