kotlin协程开发入门

听说php协程很好用,出于好奇,搜索下安卓有没这东西,发现kotlin是有的,但是原生java还没,那就搞搞kotlin的吧,没有深入学习,当做入门吧。
官方地址:https://developer.android.com/kotlin/coroutines?hl=zh-cn#groovy

基础知识:
什么是协程:
协程是一种并发设计模式,您可以在 Android 平台上使用它来简化异步执行的代码。协程是在版本 1.3 中添加到 Kotlin 的,它基于来自其他语言的既定概念。
协程和线程、进程区别:
一个进程可以有多个线程,一个线程可以存在多个协程,线程是协程承载体。协程在挂起时,线程的其他方法会继续往下执行。
协程的优缺点:
1、并发请求,效率高。
2、节省内存资源。
3、不阻塞线程。
4、内置取消支持。
协程的使用:
1、当我们请求网络数据回来时,需要把数据保存到本地,同时需要把数据展示出来,这时就可以使用协程来执行I/O操作。
2、当我们发送日志记录给服务端时可以使用协程。

object CoroutinesTest {

    val TAG = "CoroutinesTest"

    //suspend (关键字,定义一个挂起方法)
    suspend fun test(){
        test2()
        println("${TAG}:挂起函数test1,可以在挂起函数执行耗时任务 ")
    }

    suspend fun test2(){
        delay(3000)
        println("${TAG}:挂起函数test2")
    }

    fun main(){
//        launch 和 async 都会在其内部线程池中获取线程执行任务。
        println("${TAG}:Thread Name:"+Thread.currentThread().name)

        var job = GlobalScope.launch {
            println("${TAG}:Launch Thread Name:"+Thread.currentThread().name)
            delay(2000)
            println("${TAG}:启动一个协程,他不会阻塞线程")

        }

//        挂起函数只被允许在协程或另一个挂起函数中调用,(runBlocking是执行在主线程的,并且会阻塞线程)
        runBlocking {
            println("${TAG}:RunBlocking Thread Name:"+Thread.currentThread().name)
            job.join()
            println("${TAG}:join()等待job协程执行完成再往下执行,类似Thread中的join(),等待另个线程执行完成再执行")
            //delay()是一个挂起函数
            delay(3000)//非阻塞函数
            println("${TAG}:想在非协程中调用挂起函数可以使用runBlocking,该函数会阻塞线程")
            println("${TAG}:RunBlocking Thread Name:"+Thread.currentThread().name)
        }


        var deferred: Deferred<Int> = GlobalScope.async {
            println("${TAG}:Async Thread Name:"+Thread.currentThread().name)
            test()
            println("${TAG}:启动一个协程,异步执行,他不会阻塞线程,和launch的区别是他会返回一个Deferred<T>值," +
                    "这个类继承了Job,扩展了await()方法,等待结果的返回,需要在方法最后把结果返回,这里返回的是1")
            1
        }

        //取消
        deferred.cancel()

        runBlocking {
            if(deferred.isActive){
                println("${TAG}:${deferred.onAwait}")
            }else{
                println("${TAG}:cancel or complete")
            }
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值