考虑
fun main(args: Array<String>) {
runBlocking {
launch(Dispatchers.Default) {
var a = 0
a++
delay(100)
println(a)
}
}
}
由于Dispatcher有多个线程,程序是否可以在挂起时改变线程delay
功能?是否保证它会打印“1”或 a
需要AtomicInteger
?
最佳答案
执行挂起延迟()
函数后,协程可能会继续在Dispatchers.Default
线程池中的另一个线程上执行。
不需要对a
变量进行额外的同步,因为它仅在一个协程中使用,协程中的代码按顺序执行,提供发生之前的保证。如果该变量在几个协程中使用,则需要额外的同步。
关于multithreading - 协程可以挂起然后在不同的线程上恢复吗?第一个线程的内存效应是否会传递到第二个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72834086/