phoenix850121 2018-12-03 06:59 采纳率: 14.3%
浏览 1767

ForkJoinPool类中 submint 和invoke区别

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 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看