ユーザ用ツール

サイト用ツール


サイドバー

kotlin:coroutines

以前のリビジョンの文書です


coroutines

Threadとは比べ物にならないほど軽い!

// thread version
import kotlinx.coroutines.*
import java.util.concurrent.atomic.AtomicLong
import kotlin.concurrent.thread
 
fun main() {
    val c = AtomicLong()
 
    for (i in 1..1_000_000L)
// thread だと数秒まっても終了しないので諦めた
        thread(start = true) {
            c.addAndGet(i)
        }
 
    println(c.get())
 
}
 
 ↓
// coroutines version
import kotlinx.coroutines.*
import java.util.concurrent.atomic.AtomicLong
import kotlin.concurrent.thread
 
fun main() {
    runBlocking {
        val sum = deferred.sumBy { it.await() }
        println("Sum: $sum")
    }
}
 
val deferred = (1..1_000_000).map { n ->
    GlobalScope.async {
        n
    }
}
 
// Sum: 1784293664

launchと違いasyncは値を返す

import kotlinx.coroutines.*
import java.util.concurrent.atomic.AtomicLong
import kotlin.concurrent.thread
 
fun main() {
    runBlocking {
        val sum = deferred.sumBy { it.await() }
        println("Sum: $sum")
    }
}
 
val deferred = (1..1_000_000).map { n ->
    GlobalScope.async {
        delay(1000)
 
        n
    }
}
 ↓
Sum: 1784293664
kotlin/coroutines.1570053555.txt.gz · 最終更新: 2019/10/03 06:59 by ips