为什么线程混乱?



我开始学习kotlin协程。但我正面临着这样的情况。

fun main(){
println("${Thread.currentThread().name} thread started")
GlobalScope.launch {
println("${Thread.currentThread().name} thread started")
Thread.sleep(1000)
println("${Thread.currentThread().name} thread finished")
}

GlobalScope.launch {
println("${Thread.currentThread().name} thread started")
delay(1000)
println("${Thread.currentThread().name} thread finished")
}
GlobalScope.launch {
println("${Thread.currentThread().name} thread started")
delay(1000)
println("${Thread.currentThread().name} thread finished")
}

runBlocking {
delay(1000)
}
println("${Thread.currentThread().name} thread finished")
}

代码的输出:

main thread started
DefaultDispatcher-worker-1 thread started
DefaultDispatcher-worker-2 thread started
DefaultDispatcher-worker-3 thread started
DefaultDispatcher-worker-1 thread finished
DefaultDispatcher-worker-1 thread finished
DefaultDispatcher-worker-2 thread finished
main thread finished

为什么"DefaultDispatcher-worker-1线程已完成";运行了2次。我想这只是线程的名称在改变,但我想知道为什么?

协程不保证整个协程在整个持续时间内都在同一个线程上运行。线程管理由您使用的调度程序处理。调度程序。Default使用线程池,每次从挂起恢复时都可以交换线程,就像每次调用delay()之后一样。这是预期的行为,因为它可以减少派生线程对象的总数。

最新更新