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

Kotlin是否支持使用Project Loom?转译代码运行无输出问题咨询

问题根因

你遇到的无输出问题和Kotlin、Project Loom、JDK 18的兼容性没有任何关系,核心原因有两点:

  1. 你自行实现了一个空逻辑的ExecutorService.use扩展方法,方法体内既没有执行传入的代码块,也没有处理资源关闭逻辑,导致包裹在use块内的所有代码根本没有被执行,自然不会有任何输出。
  2. 直接调用Executors.newVirtualThreadExecutor().submit(...)无输出是因为虚拟线程默认是守护线程,JVM不会等待守护线程执行完成就会退出,主线程提交任务后直接结束,虚拟线程还没来得及执行打印逻辑进程就终止了。而newCachedThreadPool创建的是平台非守护线程,会阻止JVM退出直到任务执行完成,所以能看到输出。

Kotlin标准库本身已经为AutoCloseable接口(ExecutorService在JDK 19+已实现该接口)提供了原生的use扩展方法,功能和Java的try-with-resources完全对齐:执行传入的代码块后自动调用close()方法关闭资源,关闭ExecutorService时会等待所有已提交的任务执行完成,完全可以满足你的使用需求。

修复方案

删掉你自定义的空实现use扩展方法,直接使用Kotlin标准库提供的原生use方法即可,正确代码示例:

import java.util.concurrent.Executors
import java.util.stream.IntStream

fun main() {
    Executors.newVirtualThreadExecutor().use { executor ->
        IntStream.range(0, 16).forEach { i ->
            println("i = $i, Thread ID = ${Thread.currentThread()}")
            executor.submit {
                println("Thread ID = ${Thread.currentThread()}")
            }
        }
    }
}

上述代码运行后输出和Java版本完全一致。

疑问解答

  • Project Loom、JDK 18不存在与Kotlin适配的缺陷,虚拟线程可以在Kotlin中正常使用。
  • Kotlin也不存在无法与Project Loom互操作的问题,和JDK 18也没有兼容性问题,当前异常完全是自定义错误代码导致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:36:09