Ответ
Канал (Channel) — это потокобезопасный способ передачи данных между корутинами. Он похож на BlockingQueue, но без блокировки потоков, используя suspend-функции.
Особенности:
- Может передавать данные между разными корутинами
- Поддерживает буферизацию (разные capacity)
- Имеет методы send() и receive() (suspend-функции)
Пример:
val channel = Channel<Int>()
launch {
for (i in 1..5) channel.send(i)
channel.close()
}
launch {
for (value in channel) println(value)
}
Типы каналов:
RENDEZVOUS(по умолчанию) — без буфераUNLIMITED— неограниченный буферCONFLATED— хранит только последнее значение