ForkJoinPool类中 submint 和invoke区别。麻烦各位老师指导,谢谢。
1条回答 默认 最新
- snowflake_dwq 2019-01-02 07:57关注
如果你翻看一下源码会发现,submit 和 execute 跟invoke的区别是 externalPush(task);以后没有task.join
这个join方法调用的作用是使主线程挂起等候task结果。
https://stackoverflow.com/questions/17881183/difference-between-execute-submit-and-invoke-in-a-forkjoinpool
这篇文章是一个对比例子,简单的说下面这个例子中如果使用fj.submit你的主线程由于不会等候子任务结果,它就直接结束了。但是invoke可以,因为它有那句join调用
public static void main (String []args)
{
ForkJoinPool fj = new ForkJoinPool();
fj.invoke(new RecursiveTaskActionThing(500));
}
具体来说,是因为线程池默认setDaemon(true),当你的程序出了main方法主线程就销毁了,相应的线程池里的Daemon线程也跟着销毁了总结ForkJoinPool的三种task调用方式
execute(ForkJoinTask) 异步执行tasks,无返回值
invoke(ForkJoinTask) 有Join, tasks会被同步到主进程
submit(ForkJoinTask) 异步执行,且带Task返回值,可通过task.get 实现同步到主线程解决 无用评论 打赏 举报
悬赏问题
- ¥15 微信小程序协议怎么写
- ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
- ¥20 怎么用dlib库的算法识别小麦病虫害
- ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
- ¥15 java写代码遇到问题,求帮助
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看