【问题标题】:Why is there code that is executed when the thread is blocked using coroutines?为什么使用协程阻塞线程时会执行代码?
【发布时间】:2020-07-22 05:47:06
【问题描述】:

为什么线程阻塞3秒后1秒后打印'a'?

当一个线程被阻塞时,它不能进行任何计算,直到它被解锁。这个线程被 Thread.sleep() 阻塞时,怎么可能执行 println('a')?

import kotlinx.coroutines.*

fun main() = runBlocking(Dispatchers.Default) {
    GlobalScope.launch(Dispatchers.Default) {
        delay(1000L)
        println("a")
    }
    Thread.sleep(3000L)
}

【问题讨论】:

  • Dispatchers.Default 的最大线程数限制与您的 CPU 的核心数相同,例如,如果您有 4 个核心,则最多可以生成 4 个线程。

标签: multithreading kotlin coroutine kotlin-coroutines


【解决方案1】:

默认 Dispatcher 将协程调度到其自己的线程池,因此在您的示例中,delay(1000L)Thread.sleep(3000L) 在单独的线程中执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多