Tatsuro のテックブログ

アプリ開発の技術情報を発信します。

【Kotlin】launch ビルダーで Coroutine を実行する

今回は、Kotlin Coroutines の launch ビルダーについて解説します。

なお、ここに掲載しているソースコードは以下の環境で動作確認しています。

  • Android Studio Chipmunk | 2021.2.1 Patch 1
  • JDK 11.0.12
  • Android Gradle Plugin 7.2.1
  • Kotlin 1.7.0
  • Gradle 7.4.2
  • org.jetbrains.kotlinx:kotlinx-coroutines-core 1.6.3

そして、アプリの build.gradle ファイルに kotlinx-coroutines-core をインポートしています。

dependencies {
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.3"
}

launch ビルダーとは?

launch ビルダーとは、現在のスレッドをブロックせずに新しい Coroutine を起動し、その起動した Coroutine をハンドリングする Job を返す Coroutine ビルダーです。

例えば、以下のように使います。

fun main() = runBlocking {
    // (1) ノンブロッキングで Coroutine を起動する。
    val job = launch {
        delay(100L)
        // (4) "World!" を標準出力する。
        println("World!")
    }
    // (2) "Hello," を標準出力する。
    println("Hello,")
    // (3) launch ビルダーで起動された Coroutine が完了するまで待つ。
    job.join()
    // (5) "End." を標準出力する。
    println("End.")
}

上記のコードを実行すると、以下の結果を得られます。

Hello,
World!
End.

さきにも述べた通り、launch ビルダーは現在のスレッドをブロックせずに新しい Coroutine を起動します。よって、"World!" を標準出力する Coroutine と "Hello," を標準出力する Coroutine は並列して実行されます。

また、launch ビルダーが返す Job を使って、launch ビルダーにより起動された Coroutine をその Coroutine の外からハンドリングできます。上記のコードでは、Job の join を使って、Coroutine の完了をノンブロッキングで待機しています。