Java 异步代码中的屈服控制

问题描述 投票:0回答:2

我有 Rust/C#/Javascript 异步编程背景,并试图理解类似的 Java 习惯用法。具体来说,我试图了解是否存在“绿色线程”模型,其中任务在线程上运行,一旦到达等待 I/O 的点,它就会自行挂起(在其他语言中,它会是由

await
suspend
关键字表示)并允许另一个任务运行。

据我所知,

CompletableFuture
可以异步运行,但它不会释放运行它的线程 - 如果你同时执行 1000 个 future,你将需要 1000 个线程,或者根据你的执行器,你可能会使用更少的线程,但同时执行的任务也会减少。

是否有其他机制允许我使用有限数量的线程执行大量并发 I/O 操作?也许是 Kotlin 的协程,或者虚拟线程(我不喜欢依赖虚拟线程,因为它们需要相对较新版本的 Java)?

java kotlin future completable-future
2个回答
0
投票

虚拟线程正是您在 JDK 本身中寻找的东西。

否则,项目反应器(通常通过 spring-webflux)实现了相同的效果,但是通过引入声明性代码风格。


-1
投票

如果您的 I/O 操作很小,您可以使用 fork/join https://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html

© www.soinside.com 2019 - 2024. All rights reserved.