什麼是協程
協程(Coroutines)是一種比線程更加輕量級的存在,正如一個進程可以擁有多個線程一樣,一個線程可以擁有多個協程。
有一點必須明確的是,一個線程的多個協程的運行是串行的。
如果是多核CPU,多個進程或一個進程內的多個線程是可以並行運行的,但是一個線程內協程卻絕對是串行的,無論CPU有多少個核。畢竟協程雖然是一個特殊的函數,但仍然是一個函數。一個線程內可以運行多個函數,但這些函數都是串行運行的。
當一個協程運行時,其它協程必須掛起。
GlobalScope.lunch
GlobalScope.launch用於啓動了一個運行在子線程的頂層協程。
GlobalScope繼承於CoroutineScope(協程的生命週期),表示此協程的生命週期隨應用程序的生命週期。
實例:
fun main() {
GlobalScope.launch {
// 在應用程序的生命週期內啓動一個新的協程並繼續
delay(1000L)
// 非阻塞的等待1秒鐘
println("【${Thread.currentThread().name}】World!")
}
println("【${Thread.currentThread().name}】Hello,")
Thread.sleep(2000L)
// 阻塞的等待2秒鐘,因爲協程的生命週期受應用程序生命週期限制,所以這裏保證協程內部邏輯執行完
}
運行結果:
【main】Hello,
【DefaultDispatcher-worker-1】World!