在 Kotlin 中,使用協程(coroutines)可以非常簡單地實現并發。協程是一種輕量級的線程,它們允許你在代碼中編寫異步或非阻塞性的代碼。要實現并發,你可以使用 launch
和 async
這兩個函數。
下面是一個簡單的示例,展示了如何使用 Kotlin 協程實現并發:
import kotlinx.coroutines.*
fun main() = runBlocking {
// 創建兩個協程
val coroutine1 = launch {
println("Coroutine 1 started")
delay(1000L) // 模擬耗時操作
println("Coroutine 1 finished")
}
val coroutine2 = launch {
println("Coroutine 2 started")
delay(2000L) // 模擬耗時操作
println("Coroutine 2 finished")
}
// 等待所有協程完成
coroutine1.join()
coroutine2.join()
println("All coroutines finished")
}
在這個示例中,我們使用 runBlocking
創建了一個主協程。然后,我們使用 launch
函數創建了兩個子協程。這兩個子協程會并發地執行,因為它們是在同一個主協程中啟動的。delay
函數用于模擬耗時操作,它會讓協程暫停一段時間。
注意,launch
函數返回一個 Job
對象,你可以使用 join()
函數等待協程完成。在這個示例中,我們使用 join()
函數等待兩個子協程完成,然后打印 “All coroutines finished”。
此外,你還可以使用 async
函數來實現并發。async
函數會返回一個 Deferred
對象,你可以使用 await()
函數獲取異步計算的結果。這里有一個使用 async
的示例:
import kotlinx.coroutines.*
fun main() = runBlocking {
// 創建一個協程并啟動異步計算
val deferredResult = async {
println("Async computation started")
delay(1000L) // 模擬耗時操作
"Hello, World!"
}
// 獲取異步計算的結果
val result = deferredResult.await()
println("Async computation result: $result")
println("Async computation finished")
}
在這個示例中,我們使用 async
函數創建了一個協程,并啟動了一個異步計算。異步計算會立即返回一個 Deferred
對象,我們可以使用 await()
函數獲取計算結果。注意,async
函數必須在 suspend
函數內部調用,因為它是一個掛起函數。