Kotlin のコルーチン入門
この記事は何か? Kotlin のコルーチンライブラリに kotlinx.coroutines がある。このライブラリには丁寧なドキュメント が付随しており、それを一歩ずつ写経しながら訳していく。なお、全文を訳してはいないし、自分で書き足した部分もある。興味を持っていただけたのであれば、原文にあたることをお勧めする。
はじめの一歩を踏み出す import kotlinx.coroutines.* fun main() { GlobalScope.launch { // 新しいコルーチンを作りバックグラウンドで動作させる delay(1000L) // 1秒待つ (non-blocking) println("World!") } println("Hello, ") // コルーチンが待っている間メインスレッドが動き続ける Thread.sleep(2000L) // メインスレッドを止めないように sleep する } これの出力結果:
Hello, World! コルーチンは軽量なスレッドであり、CoroutineScope の launch で作成できる。このサンプルでは GlobalScope.launch {} でコルーチンを作っており、これはアプリケーションそのものと同じライフサイクルを持つ。
なお、これと同じことは普通の thread でも実現できる。
import kotlin.concurrent.thread fun main() { thread { Thread.sleep(1000L) println("World!") } println("Hello, ") Thread.sleep(2000L) } ブロックする箇所を明示する non-blocking な delay() と blocking な Thread.sleep() が混ざると読みにくい。 runBlocking {} を導入して delay() だけで同じことを実現できる。メインスレッドは runBlocking をトリガーし、 runBlocking 内のコルーチンが終了するまでブロックする。
[Read More]