在 Kotlin 中,使用協(xié)程(coroutines)可以非常簡(jiǎn)單地實(shí)現(xiàn)并發(fā)。協(xié)程是一種輕量級(jí)的線程,它們?cè)试S你在代碼中編寫異步或非阻塞性的代碼。要實(shí)現(xiàn)并發(fā),你可以使用 launch
和 async
這兩個(gè)函數(shù)。
下面是一個(gè)簡(jiǎn)單的示例,展示了如何使用 Kotlin 協(xié)程實(shí)現(xiàn)并發(fā):
import kotlinx.coroutines.*
fun main() = runBlocking {
// 創(chuàng)建兩個(gè)協(xié)程
val coroutine1 = launch {
println("Coroutine 1 started")
delay(1000L) // 模擬耗時(shí)操作
println("Coroutine 1 finished")
}
val coroutine2 = launch {
println("Coroutine 2 started")
delay(2000L) // 模擬耗時(shí)操作
println("Coroutine 2 finished")
}
// 等待所有協(xié)程完成
coroutine1.join()
coroutine2.join()
println("All coroutines finished")
}
在這個(gè)示例中,我們使用 runBlocking
創(chuàng)建了一個(gè)主協(xié)程。然后,我們使用 launch
函數(shù)創(chuàng)建了兩個(gè)子協(xié)程。這兩個(gè)子協(xié)程會(huì)并發(fā)地執(zhí)行,因?yàn)樗鼈兪窃谕粋€(gè)主協(xié)程中啟動(dòng)的。delay
函數(shù)用于模擬耗時(shí)操作,它會(huì)讓協(xié)程暫停一段時(shí)間。
注意,launch
函數(shù)返回一個(gè) Job
對(duì)象,你可以使用 join()
函數(shù)等待協(xié)程完成。在這個(gè)示例中,我們使用 join()
函數(shù)等待兩個(gè)子協(xié)程完成,然后打印 “All coroutines finished”。
此外,你還可以使用 async
函數(shù)來實(shí)現(xiàn)并發(fā)。async
函數(shù)會(huì)返回一個(gè) Deferred
對(duì)象,你可以使用 await()
函數(shù)獲取異步計(jì)算的結(jié)果。這里有一個(gè)使用 async
的示例:
import kotlinx.coroutines.*
fun main() = runBlocking {
// 創(chuàng)建一個(gè)協(xié)程并啟動(dòng)異步計(jì)算
val deferredResult = async {
println("Async computation started")
delay(1000L) // 模擬耗時(shí)操作
"Hello, World!"
}
// 獲取異步計(jì)算的結(jié)果
val result = deferredResult.await()
println("Async computation result: $result")
println("Async computation finished")
}
在這個(gè)示例中,我們使用 async
函數(shù)創(chuàng)建了一個(gè)協(xié)程,并啟動(dòng)了一個(gè)異步計(jì)算。異步計(jì)算會(huì)立即返回一個(gè) Deferred
對(duì)象,我們可以使用 await()
函數(shù)獲取計(jì)算結(jié)果。注意,async
函數(shù)必須在 suspend
函數(shù)內(nèi)部調(diào)用,因?yàn)樗且粋€(gè)掛起函數(shù)。