Что выведет код Senior Корутины и structured concurrency обновлено
yield и очередь одного потока
Вопрос
Что выведет код? По строке на каждый вывод.
import kotlinx.coroutines.*
fun main() = runBlocking<Unit> {
launch {
repeat(3) {
println("A$it")
yield()
}
}
launch {
repeat(3) {
println("B$it")
yield()
}
}
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: A0, B0, A1, B1, A2, B2. Обе корутины работают в одном потоке runBlocking. yield() приостанавливает текущую корутину и отдаёт поток следующей в очереди, поэтому они чередуются.
Что выведет
A0
B0
A1
B1
A2
B2
Разбор
Обе корутины работают в одном потоке runBlocking. yield() приостанавливает текущую корутину и отдаёт поток следующей в очереди, поэтому они чередуются. Без yield первая корутина напечатала бы все три строки подряд, потому что точек приостановки у неё не было бы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.