_StayStrong 2023-12-14 11:46 采纳率: 62.5%
浏览 2
已结题

探究CompletableFuture任务异步的问题

我的代码:

public class MyStudy {
    public void start() throws Exception{

        CompletableFuture<String> cf = CompletableFuture.supplyAsync(MyStudy::task);

        //异步任务完成
        cf.thenAccept((result) -> {
              System.out.println("successful");
        });

        //标记主线程结束
        System.out.println("main main main thread is ended");
    }

    static String task(){
        while (true){
            try {
                //标记子线程进行
                System.out.println("executing...");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }
}

问题内容:
CompletableFuture.supplyAsync()提交的异步任务由java.util.concurrent.ForkJoinPool线程池接管,而该线程中的线程默认为守护线程,那么我的问题是:

  1. 如果主线程结束了,而子线程中的异步任务还没结束会怎么样?
  2. 如果我想正确、保险的处理回调返回值,必须在thenAccept前通过join方法等待子线程中的异步任务完成吗?(毕竟不知道主线程什么时候会结束,也不知道子线程什么时候会处理完,所以个人认为join是保险的方法)

以下是我个人理解的逻辑图,如有不对,请各位批评

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月22日
    • 创建了问题 12月14日

    悬赏问题

    • ¥20 python爬虫遇到空文本取不出来
    • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
    • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
    • ¥20 关于web前端如何播放二次加密m3u8视频的问题
    • ¥15 使用百度地图api 位置函数报错?
    • ¥15 metamask如何添加TRON自定义网络
    • ¥66 关于川崎机器人调速问题
    • ¥15 winFrom界面无法打开
    • ¥30 crossover21 ARM64版本安装软件问题
    • ¥15 mymetaobjecthandler没有进入