You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CompletableJob的job.join()与job.complete()方法有何区别?

CompletableJob中join()与complete()的区别

这两个方法是完全不同的操作,核心区别如下:

  • complete():主动标记作业完成
    它是用来手动触发CompletableJob进入完成状态的主动操作。调用该方法后,作业的状态会变为完成,所有等待这个作业的线程或协程都会被唤醒。如果作业已经处于完成、取消或失败状态,调用complete()会返回false,不会产生任何状态变化。

  • join():等待作业状态变为完成
    这是一个被动等待的操作。调用它的线程会被阻塞(如果是在协程环境中调用,则会挂起协程,不会阻塞线程),直到目标CompletableJob进入完成状态(不管是通过complete()主动完成,还是被取消、因失败而完成)。它本身不会改变作业的状态,只是单纯等待状态变更。

举个简单的代码示例来直观理解:

val job = Job()

// 启动线程等待作业完成
Thread {
    job.join() // 线程在此阻塞,直到job被标记为完成
    println("作业已完成")
}.start()

// 延迟1秒后主动标记作业完成
Thread.sleep(1000)
job.complete() // 执行后,上面等待的线程会被唤醒并打印内容

内容的提问来源于stack exchange,提问作者k314159

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:47:33