美文网首页
初识协程

初识协程

作者: lqhunter | 来源:发表于2020-09-08 18:54 被阅读0次

一、添加依赖

//协程核心库
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.1"
//当前平台所对应的平台库
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.1"

kotlin协程是什么

kotlin封装的线程框架,方便进行线程切换

二、第一个协程程序

//创建一个协程
GlobalScope.launch(Dispatchers.IO) {
    
}

//使用协程进行线程切换
GlobalScope.launch(Dispatchers.IO) {
        println(Thread.currentThread().name)
        launch(Dispatchers.Default) {
            println(Thread.currentThread().name)
        }
    }


fun test01() {
    println("开始执行->" + Thread.currentThread().name)
    GlobalScope.launch {
        println("执行协程->" + Thread.currentThread().name)
        delay(3000)
        println("协程结束->" + Thread.currentThread().name)
    }
    println("协程后运行的代码->" + Thread.currentThread().name)
    sleep(6000L) // 阻塞主线程 6 秒钟来保证 JVM 存活
    println("结束执行->" + Thread.currentThread().name)
}
  • GlobalScope,全局作用域,用于启动在整个应用程序生命周期内运行的顶级协程。

  • launch,CoroutineScope的扩展方法,用于启动协程。

四、withContext

这个函数可以切换到指定的线程,并在逻辑执行结束之后,自动把线程切回去继续执行

//使用协程进行线程切换
GlobalScope.launch {
    println(1)
    val result = withContext(Dispatchers.IO) {
        delay(3000)
        "aaa"
    }
    println(result)
}

三、suspend 挂起函数

launch 或者其他函数创建的协程,在执行到某一个 suspend 函数的时候,这个协程会从当前线程被「suspend」,也就是被挂起。

  • 从当前线程挂起,换句话说,就是这个协程从正在执行它的线程上脱离
  • 线程执行到了 suspend 函数这里的时候,就暂时不再执行剩余的协程代码,跳出协程的代码块,继续做其他事情,如果它是一个后台线程:
    要么无事可做,被系统回收
    要么继续执行别的后台任务

如果是主线程,就继续做其他主线程任务,刷新界面

  • 挂起的代码会在指定其他线程执行,在执行完成之后,协程会重新切回它原先的线程

四、async

GlobalScope.launch {
    println(1)
    val result = withContext(Dispatchers.IO) {
        delay(3000)
        "aaa"
    }
    println(result)
    val result1 = withContext(Dispatchers.IO) {
        delay(3000)
        "bbb"
    }
    println(result1)
}
//需要同时将两个异步工作的结果结合起来使用的情况
    GlobalScope.launch {
        val defer1 = async {
            delay(3000)
            "bbb"
        }

        val defer2 = async {
            delay(4000)
            "ccc"
        }

        println(defer1.await() + "-" + defer2.await())
    }
    sleep(10000)

相关文章

网友评论

      本文标题:初识协程

      本文链接:https://www.haomeiwen.com/subject/ypwydktx.html