Что выведет код 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 ошибок.