(1)可以接受的任务类型

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定义

  1. public interface Callable<V> {

  2. V call() throws Exception;

  3. }

其中的call能够抛出Exception异常,所以不管是CheckedException还是UncheckedException,直接抛出即可

  1. import java.util.concurrent.Callable;

  2. import java.util.concurrent.ExecutionException;

  3. import java.util.concurrent.ExecutorService;

  4. import java.util.concurrent.Executors;

  5. import java.util.concurrent.Future;

  6. public class ThreadExceptionTest {

  7. public static void main(String[] args) {

  8. ExecutorService executor = Executors.newCachedThreadPool();

  9. Future<Boolean> future = executor.submit(new CallableTask());

  10. try {

  11. future.get();

  12. } catch (InterruptedException e) {

  13. e.printStackTrace();

  14. } catch (ExecutionException e) {

  15. e.printStackTrace();

  16. }

  17. executor.shutdown();//必须不能忘,否则会一致卡在那里

  18. }

  19. }

  1. class CallableTask implements Callable<Boolean>{

  2. public Boolean call() throws Exception {

  3. // InputStream in = new FileInputStream(new File("xx.pdf"));

  4. int num = 3/0;

  5. return false;

  6. }

  7. }

结果为:

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)

submit与execute区别相关推荐

  1. java_多线程——线程池、submit和execute区别

    一.线程池的概念 顾名思义就是事先准备一个池子(线程池),初始化一些线程,当使用可以快速调用,不用再初始化线程,使用完成后,不再销毁该线程,归还到线程池,方便后面复用.节省创建和销毁线程资源,提高线程 ...

  2. 线程池ExecutorService中submit和execute区别

    1.execute是接口Executor的方法 ,submit是Executor子接口ExecutorService的方法(ExecutorService接口继承了Executor接口,Executo ...

  3. submit()和execute()区别

    1.接收的参数不同 由以上图看出,execute()只能接受Runnable类型参数,而submit()函数还可以接受Callable类型参数: 2.有无返回值 submit()函数都有返回值Futu ...

  4. 一心多用多线程-细谈java线程池submit与execute的区别

    深夜学习,发现ThreadPoolExecutor里面一个小知识点,故开热点连wifi怒写submit与execute方法的区别. 1.问题的来源 在看书的时候,涉及到java线程池问题的时候常常面临 ...

  5. Submit和execute的区别

    深夜学习,发现ThreadPoolExecutor里面一个小知识点,故开热点连wifi怒写submit与execute方法的区别. 1.问题的来源 在看书的时候,涉及到java线程池问题的时候常常面临 ...

  6. 血的教训--如何正确使用线程池submit和execute方法

    血的教训之背景:使用线程池对存量数据进行迁移,但是总有一批数据迁移失败,无异常日志打印 凶案起因 ​ 听说parallelStream并行流是个好东西,由于日常开发stream串行流的场景比较多,这次 ...

  7. ExecutorService中submit和execute的区别转

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中 ...

  8. 线程池的submit和execute方法区别

    线程池中的execute方法大家都不陌生,即开启线程执行池中的任务.还有一个方法submit也可以做到,它的功能是提交指定的任务去执行并且返回Future对象,即执行的结果.下面简要介绍一下两者的三个 ...

  9. ExecutorService中submit和execute的区别(转)

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中 ...

最新文章

  1. #读书笔记 Android-Activity启动模式
  2. WINDOWS SERVER 2003 之域重命名
  3. 属性与意图识别_解密宝能汽车智能驾舱的“未来属性”
  4. 使用frp实现将内网映射到公网 无需花生壳
  5. 一道头条算法题,一种不为人知的解法!
  6. mysql读写分离 存储过程_MySQL读写分离 · wang-y/Technical-Information Wiki · GitHub
  7. 「沐神」工作五年的沉思录 「这就是李沐」开挂人生的深度解读
  8. 最炫黑科技还得谷歌!一副眼镜告别学外语,一个地图App在家沉浸式环球游
  9. php 教育类,php教育培训网站是哪个
  10. 硬盘服务器与硬盘阵列,磁盘阵列和硬盘的区别是什么
  11. I 帧和 IDR 帧的区别
  12. 机器翻译领域最重要的论文和学术文献目录清单(清华大学NLP组)
  13. 等保合规是什么意思?怎么做?
  14. 如何让iPad变成Mac的扩展屏幕
  15. 北师大听讲座-李玫瑾教授-犯罪心理实案点评
  16. 品牌LOGO设计丨商业实践设计思路大揭秘 难怪他接单不断
  17. 读《如何高效学习(Learn More Study Less)》(Scott Young)的感悟
  18. js promise.all
  19. linux如何返回上一级目录
  20. Zend Framework教程-Zend的Model-基本规则和使用

热门文章

  1. python asyncio回调函数_python回调函数用法实例分析
  2. shell脚本详解(八)——一键部署自动化装机(PXE无人值守)
  3. java 遍历map获取下标_java 遍历Map并且获取其中的键值
  4. python读写xlsx文件_python读写Excel文件--使用xlrd模块读取,xlwt模块写入
  5. @retention注解作用_Spring 最核心的注解,都是干货!
  6. android sharedpreferences 工具类,android sharedpreferences工具类
  7. python怎样打开加密的文件_python基础教程如何用Python 加密文件
  8. 12306订票候补是个坑_还在加钱抢票?12306已屏蔽多个抢票软件渠道!
  9. 下标 获取字符_【文山玩Python】如何从字符串中取一段或指定字符
  10. oracle删除所有触发器的命令,Oracle删除当前用户的所有对象(表、视图、触发器、存储过程、函数)...