关于ForkJoin框架的一点小坑

本文探讨了如何在使用ForkJoinPool执行ForkJoinTask时,由于主线程非守护及execute方法异步特性导致任务结果不显。作者提供了通过判断task状态或使用invoke实现同步执行的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用ForkJoinPool执行ForkJoinTask,如果main方法中使用pool.execute(task);主函数中没有其他操作,会看不到task执行结果。        

        原因分析:

        1.execute是异步执行(不需要等待task执行完毕主函数就继续执行下面的语句);invoke是同步执行,主函数等待invoke执行完毕再继续执行。
        2.主线程是非守护线程,ForkJoinPool执行任务的线程是守护线程。主线程执行execute后没有等task完成就继续执行后续命令然后主线程结束,当程序中只有守护线程时jvm就会退出。
建议主线程执行execute后做判断while(!task.isDone()){System.out.println("任务执行中...");Thread.sleep(1000);}或者调用invoke,主线程阻塞等待task执行完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值