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
相关产品推荐
相关产品推荐

