最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin-Coroutines中的async與await異步協(xié)程管理

 更新時間:2023年10月17日 12:01:25   作者:ZoranLee  
這篇文章主要為大家介紹了Kotlin-Coroutines中的async與await異步協(xié)程管理,提升程序性能解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

Coroutines

官網(wǎng)說明

什么是協(xié)程?(摘自官網(wǎng))

  • Asynchronous or non-blocking programming is an important part of the development landscape. 用于異步或非阻塞 編程。

簡單概括 

  • 同步的方式去編寫異步執(zhí)行的代碼
  • 協(xié)程依賴于線程
  • 協(xié)程掛起時不需要阻塞線程,幾乎是無代價的.
  • 一個線程中可以創(chuàng)建N個協(xié)程

協(xié)程的創(chuàng)建/啟動

  • runBlocking 啟動一個新的協(xié)程并阻塞調(diào)用它的線程
  • launch:Job 啟動一個協(xié)程但不會阻塞調(diào)用線程(CoroutineScope作用域內(nèi)調(diào)用)
  • async:Deferred<T> 啟動一個協(xié)程但不會阻塞調(diào)用線程(CoroutineScope作用域內(nèi)調(diào)用)

協(xié)程作用域(CoroutineScope)

GlobalScope 全局頂級協(xié)程 (現(xiàn)在 GlobalScope 類已被 @DelicateCoroutinesApi 注解所標記) 全局范圍
啟動一個協(xié)程:

CoroutineScope https://developer.android.com/topic/libraries/architecture/coroutines

MainScope 主線程的作用域,全局范圍

lifecycleScope 生命周期范圍,用于activity等有生命周期的組件,DESTROYED結束。

class MyFragment: Fragment() {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewLifecycleOwner.lifecycleScope.launch {
            val params = TextViewCompat.getTextMetricsParams(textView)
            val precomputedText = withContext(Dispatchers.Default) {
                PrecomputedTextCompat.create(longTextContent, params)
            }
            TextViewCompat.setPrecomputedText(textView, precomputedText)
        }
    }
}
 class MyViewModel: ViewModel() {
    init {
        viewModelScope.launch {
            // Coroutine that will be canceled when the ViewModel is cleared.
        }
    }
}
val user: LiveData<User> = liveData {
    val data = database.loadUser() // loadUser is a suspend function.
    emit(data)
}

異步、并發(fā)、并行

異步

  • 是一種編程模型
  • 獨立于主程序流事件的發(fā)生
  • 異步啟動的操作,不會立即阻塞程序,并同時發(fā)生
    異步是實現(xiàn)非阻塞和并發(fā)編程的編程模型

并發(fā)

  • 獨立執(zhí)行任務的組合
  • 所有任務的工作都可以以某種任意順序交錯
  • 這些任務不一定必須同時執(zhí)行
    它的主要目標是結構,而不是并行性

并行

  • 同時執(zhí)行多個事物
  • 與多個任務的執(zhí)行有關

并發(fā)就是一次處理很多事情,并行就是一次做很多事情

協(xié)程中的并發(fā)和并行

  • 掛起而非阻塞 ,一個并發(fā)的例子
import kotlinx.coroutines.*
import kotlin.system.measureTimeMillis
fun main(args: Array<String>) =
    runBlocking {
        val time = measureTimeMillis {
            val one = async { doSomethingUsefulOne() }
            val two = async { doSomethingUsefulTwo() }
            println("The answer is ${one.await()} ${two.await()}")
        }
        println("Completed in $time ms")
    }
suspend fun doSomethingUsefulTwo() :Int{
    delay(1000L)
    println("two")
    return  2
}
suspend fun doSomethingUsefulOne():Int {
    delay(1000L)
    println("one")
    return  1
}

 結果

one
two
The answer is 1 2
Completed in 1020 ms

并行

  • GlobalScope
  • 指定協(xié)同調(diào)度程序
  • 暫停阻塞
suspend fun doSomethingUsefulOne(): BigInteger = withContext(Dispatchers.Default) {
    measureTimedValue {
        println("in doSomethingUsefulOne")
        BigInteger(1500, Random()).nextProbablePrime()
    }
}.also {
    println("Prime calculation took ${it.duration} ms")
}.value

以上就是Kotlin-Coroutines中的async與await異步協(xié)程管理的詳細內(nèi)容,更多關于Kotlin Coroutines異步協(xié)程的資料請關注腳本之家其它相關文章!

相關文章

  • SpringBoot application.yml 最全避坑與多環(huán)境配置

    SpringBoot application.yml 最全避坑與多環(huán)境配置

    SpringBoot項目中,application.yml配置至關重要,涵蓋服務器端口、數(shù)據(jù)庫連接、第三方服務集成等配置,正確配置決定項目啟動與穩(wěn)定運行,本文詳細解析yml語法、多環(huán)境配置及敏感信息處理,助你高效編寫、規(guī)避常見問題
    2026-06-06
  • Java MD5加密(實例講解)

    Java MD5加密(實例講解)

    下面小編就為大家?guī)硪黄狫ava MD5加密(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java實現(xiàn)Excel數(shù)據(jù)驗證功能

    Java實現(xiàn)Excel數(shù)據(jù)驗證功能

    在Java中,開發(fā)者可以使用一些開源的庫(如Apache POI)來添加、修改和處理Excel中的數(shù)據(jù),下面我們就來看看如何使用Java實現(xiàn)添加,修改和刪除Excel數(shù)據(jù)驗證吧
    2023-10-10
  • Java 知識難點之異常的認知與使用詳解

    Java 知識難點之異常的認知與使用詳解

    所謂異常是指程序在運行時出現(xiàn)錯誤時提示調(diào)用者的機制,異常的種類有很多,不同種類的異常有不同的含義,也有不同的處理方式,通讀本篇對大家的學習或工作具有一定的價值,需要的朋友可以參考下
    2021-09-09
  • JavaWeb使用Session和Cookie實現(xiàn)登錄認證

    JavaWeb使用Session和Cookie實現(xiàn)登錄認證

    本篇文章主要介紹了JavaWeb使用Session和Cookie實現(xiàn)登錄認證,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • SpringBoot請求參數(shù)接收方式

    SpringBoot請求參數(shù)接收方式

    這篇文章主要介紹了SpringBoot請求參數(shù)接收方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • springboot項目idea熱部署的教程詳解

    springboot項目idea熱部署的教程詳解

    這篇文章主要介紹了springboot項目idea熱部署,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 關于Java中Bean的作用域詳解

    關于Java中Bean的作用域詳解

    這篇文章主要介紹了關于Java中Bean的作用域詳解,限定程序中變量的可?范圍叫做作?域,或者說在源代碼中定義變量的某個區(qū)域就叫做作?域,需要的朋友可以參考下
    2023-08-08
  • Servlet3.0新特性全解

    Servlet3.0新特性全解

    Servlet3.0新特性有異步處理支持、新增的注解支持、可插性支持,下面我們將逐一講解這些新特性,通過下面的學習,讀者將能夠明晰了解Servlet?3.0的變化,并能夠順利使用它進行日常的開發(fā)工作
    2023-05-05
  • 如何解決SpringBoot啟動時無法加載配置文件或環(huán)境變量問題

    如何解決SpringBoot啟動時無法加載配置文件或環(huán)境變量問題

    文章主要介紹了在Spring Boot項目中遇到配置文件加載失敗和資源目錄圖標異常的問題,并提供了詳細的解決步驟,解決方法包括在pom.xml文件中添加特定配置,確保資源目錄順序正確,以及注意節(jié)點的正確使用,通過這些步驟,可以有效解決資源加載問題,提高開發(fā)效率
    2024-12-12

最新評論

新巴尔虎左旗| 甘洛县| 剑河县| 宕昌县| 西宁市| 柳州市| 德州市| 青龙| 文安县| 旺苍县| 沽源县| 绵竹市| 高州市| 凤阳县| 文登市| 正安县| 紫阳县| 江北区| 横峰县| 安塞县| 阿城市| 宜丰县| 曲水县| 石嘴山市| 宁明县| 邯郸市| 连南| 武义县| 奉贤区| 邢台县| 通海县| 长沙市| 越西县| 汝南县| 柳河县| 银川市| 措美县| 莱西市| 茶陵县| 印江| 闸北区|