线程池的submit和execute方法区别
线程池中的execute方法大家都不陌生,即开启线程执行池中的任务。还有一个方法submit也可以做到,它的功能是提交指定的任务去执行并且返回Future对象,即执行的结果。下面简要介绍一下两者的三个区别:
1、接收的参数不一样
2、submit有返回值,而execute没有
用到返回值的例子,比如说我有很多个做validation的task,我希望所有的task执行完,然后每个task告诉我它的执行结果,是成功还是失败,如果是失败,原因是什么。
然后我就可以把所有失败的原因综合起来发给调用者。
个人觉得cancel execution这个用处不大,很少有需要去取消执行的。
而最大的用处应该是第二点。
3、submit方便Exception处理
意思就是如果你在你的task里会抛出checked或者unchecked exception,
而你又希望外面的调用者能够感知这些exception并做出及时的处理,那么就需要用到submit,通过捕获Future.get抛出的异常。
下面一个小程序演示一下submit方法
public class RunnableTestMain {
public static void main(String[] args) {
ExecutorService pool = Executors.newFixedThreadPool(2);
/**
* execute(Runnable x) 没有返回值。可以执行任务,但无法判断任务是否成功完成。
*/
pool.execute(new RunnableTest("Task1"));
/**
* submit(Runnable x) 返回一个future。可以用这个future来判断任务是否成功完成。请看下面:
*/
Future future = pool.submit(new RunnableTest("Task2"));
try {
if(future.get()==null){//如果Future's get返回null,任务完成
System.out.println("任务完成");
}
} catch (InterruptedException e) {
} catch (ExecutionException e) {
//否则我们可以看看任务失败的原因是什么
System.out.println(e.getCause().getMessage());
}
}
}
public class RunnableTest implements Runnable {
private String taskName;
public RunnableTest(final String taskName) {
this.taskName = taskName;
}
@Override
public void run() {
System.out.println("Inside "+taskName);
throw new RuntimeException("RuntimeException from inside " + taskName);
}
}
转载于:https://www.cnblogs.com/liuchuanfeng/p/6956014.html
线程池的submit和execute方法区别相关推荐
- java 线程池 execute_Java线程池的submit和execute方法区别
线程池中的execute方法大家都不陌生,即开启线程执行池中的任务. 还有一个方法submit也可以做到,它的功能是提交指定的任务去执行并且返回Future对象,即执行的结果. 下面简要介绍一下两者的 ...
- Java线程池中submit()和execute()方法有什么区别
两个方法都可以向线程池提交任务,execute()方法的返回类型是void,它定义在Executor接口中,而submit()方法返回有计算结构的Future对象,它定义在ExecutorServic ...
- java_多线程——线程池、submit和execute区别
一.线程池的概念 顾名思义就是事先准备一个池子(线程池),初始化一些线程,当使用可以快速调用,不用再初始化线程,使用完成后,不再销毁该线程,归还到线程池,方便后面复用.节省创建和销毁线程资源,提高线程 ...
- 血的教训--如何正确使用线程池submit和execute方法
血的教训之背景:使用线程池对存量数据进行迁移,但是总有一批数据迁移失败,无异常日志打印 凶案起因 听说parallelStream并行流是个好东西,由于日常开发stream串行流的场景比较多,这次 ...
- 一心多用多线程-细谈java线程池submit与execute的区别
深夜学习,发现ThreadPoolExecutor里面一个小知识点,故开热点连wifi怒写submit与execute方法的区别. 1.问题的来源 在看书的时候,涉及到java线程池问题的时候常常面临 ...
- 13.ThreadPoolExecutor线程池之submit方法
jdk1.7.0_79 在上一篇<ThreadPoolExecutor线程池原理及其execute方法>中提到了线程池ThreadPoolExecutor的原理以及它的execute方法 ...
- 暴露的全局方法_面试刷题36:线程池的原理和使用方法?
线程池原理和使用在面试中被高频问到,比如阿里的面试题.下面我们针对问题来进行回答. 为什么要使用线程池? 线程池的使用场景有2: 1, 高并发场景:比如tomcat的处理机制,内置了线程池处理http ...
- 正确关闭线程池:shutdown 和 shutdownNow 的区别
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/xiewenfeng520/ article/details/107013342 前言 本章分为两个议题 如何正确关闭线程池 s ...
- Submit和execute的区别
深夜学习,发现ThreadPoolExecutor里面一个小知识点,故开热点连wifi怒写submit与execute方法的区别. 1.问题的来源 在看书的时候,涉及到java线程池问题的时候常常面临 ...
最新文章
- 【每日一算法】杨辉三角到底是什么?
- js数组去重解决方案
- 使用StarWind为RAC设置存储
- RNN(Recurrent Neural Network)的几个难点
- 为什么互联网公司需要测试人员?
- JS 测试 Prototype
- dw1510_超低温种子储存柜
- Windows 8 开启 NetFX3
- OFDM中的DC subcarrier
- python 自动化办公 随机生成题库文档
- 庞皓计量经济学第四版_庞皓《计量经济学》(第4版)全套资料【教材+笔记+题库】...
- 二路归并排序算法c语言实现,二路归并排序算法实现-完整C语言程序
- java课程设计报告书_java课程设计报告书模板
- Programming Paradigms 编程范式-笔记
- python 用tushare每日获得每天股票数据
- 工信部总工程师:建设网络强国振兴实体经济
- ArcGIS之修改图层要素名称
- 《有限与无限的游戏》第一章 世上至少有两种游戏:经典摘抄(2)
- 汇编语言-计算总平成绩
- 见微知著,人脸识别智能门禁带你领略“智慧新高度”
热门文章
- Android音频开发(七)音频编解码之MediaCodec编解码AAC下
- Android四大组件---BroadcastReceiver
- c++ 使用正则匹配url
- assertionerror是什么异常_php7异常与错误处理和自定义异常
- 请概述可视化卷积神经网络的中间输出的基本思想。_万字长文:特征可视化技术(CAM)...
- Lubuntu16.4.3定制教程
- 链接随机html,通过Javascript/HTML生成随机链接
- excel打印字被表格遮住_Excel表格太大无法打印在一页纸上?这几个打印技巧你值得学习...
- Elasticsearch】 es Match Query
- 【git】LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443