ExecutorService的submit方法的坑
2024-08-31 21:22:58
先看一段代码:
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Void> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) {
return new FutureTask<T>(runnable, value);
}
注意,如果submit提交的参数传递的Runnable类型会将Runnable适配为一个FutureTask对象,但结果为null,及Future.get()的结果为null。
这会有一个问题:如果submit提交的参数本身就是一个FutureTask,那么他的结果也会被适配为null,导致与预期结果不符。解决办法,如果本省就是FutureTask,则使用execute方法提交。
ListenableFutureTask<RecordSet> f = new SecondTaskFutureTask(new Callable<RecordSet>() {
@Override
public RecordSet call() throws Exception {
RecordSet rs = process.process(pw);
return rs;
}
});
ex.execute(f);
RecordSet rs = f.get();
最新文章
- sql查询
- Python之路,day3-Python基础
- 烂泥:学习mysql数据库主从同步复制原理
- ProgressDialog使用总结
- Mybatis保存数据时事务问题
- jquery事件切换hover/toggle
- Tomcat处理HTTP请求源码分析(上)(转)
- [King.yue]EXT.NET TextFieldFor添加正则表达式
- JavaScript、ES5和ES6的介绍和区别
- 【MySQL】MySQL的执行计划及索引优化
- Echarts地图使用经验-地图变形和添加数据
- 流媒体技术学习笔记之(十八)Ubuntu 16.04.3 如何编译 FFmpeg 记录
- 利用SMB jcifs实现对windows中的共享文件夹的操作
- grid布局合并单元格
- HDU 1513 &;&; POJ 1159 Palindrome (DP+LCS+滚动数组)
- 怎样用modelsim做后仿真
- CUGBACM Codeforces Tranning 1 题解
- dsPIC33EP 时钟初始化程序
- java实现 zip解压缩
- jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别讲解