Adi*_*and 6 java multithreading kotlin kotlin-coroutines
上下文是我需要使用一些使用旧世界线程模型的遗留 Java 代码。线程池执行程序、调度程序以及可运行程序和线程。
但是,我的新代码与所有协程兼容。
所以,给定一个可运行的
val runnable = Runnable {
print("Hurray")
}
Run Code Online (Sandbox Code Playgroud)
有没有比以下更好的方法在协程范围内运行这个 runnable 感觉有点笨拙(你真的只是绕过你试图运行一个 runnable 并在协程中挤压它的事实)
GlobalScope.launch(Dispatchers.IO) { runnable.run() }
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以与 runnables 和协程互操作?
考虑到您在问题中的全部输入,这就是执行以下操作所需的全部内容Runnable:
runnable.run()
Run Code Online (Sandbox Code Playgroud)
现在,如果您隐式假设该可运行对象后面有一些持久的计算或阻塞 I/O,并且您不想阻塞当前线程,那么您必须将其分派到后台线程池,这是完全相同的你必须用Java来做。在这种情况下,你就必须写出你所说的“笨拙”的习语。
如果您希望能够以runnable.run()某种方式编写并使用 Kotlin,自动将阻塞 IO 代码转变为挂起状态,那么出于根本原因这是不可能的。在这种情况下,Java 代码执行本机系统调用,这会阻塞调用线程,并且无法绕过这一事实。
| 归档时间: |
|
| 查看次数: |
1107 次 |
| 最近记录: |