轻量级线程——Kotlin之协程

Kotlin协程提供了一种轻量级线程的异步操作方式,避免了传统线程的阻塞和高昂开销。通过挂起函数,协程在不阻塞线程的情况下实现任务执行,有效提高了资源利用率和程序响应速度。在Android中,协程简化了异步编程,使得管理多个并发任务变得更加便捷。协程的常用函数如launch、async和runBlocking,可以帮助开发者轻松实现任务的并发和同步。
摘要由CSDN通过智能技术生成

轻量级线程——Kotlin之协程

协程是一种“轻量级线程“,从Kotlin 1.1开始引入。由于一些耗时操作(如网络IO、文件 IO、CPU或GPU密集型任务)会使线程阻塞直到操作完成,协程提供了一种避免线程阻塞、开销更小且更加可控的异步操作。

协程的基本原理

协程完全通过编译技术实现(不需要来自 VM 或 OS 端的支持),挂起通过代码来生效。基本上,每个挂起函数都转换为状态机,其中的状态对应于挂起调用。刚好在挂起前,下一状态与相关局部变量等一起存储在编译器生成的类的字段中。在恢复该协程时,恢复局部变量并且状态机从刚好挂起之后的状态进行。

为什么需要协程

阻塞还是挂起

协程可以被挂起而不阻塞线程,线程的阻塞代价是昂贵的。尤其是创建线程数量是有限的,当线程被阻塞,那些重要的任务就有可能被延迟。协程的挂起几乎是没有代价的,它不需要切换上下文。协程的本质是最大限度的利用线程所获得的cpu时间,提高线程的效率。

协程的简单使用——launch函数

使用launch函数

    public fun launch(
    context: CoroutineContext = DefaultDispatcher,
    start: CoroutineStart = CoroutineStart.DEFAULT,
    block: suspend CoroutineScope.() -> Unit): Job {}

第一个参数为协程的上下文

第二个参数为协程的启动选项

第三个参数为一个suspend修饰的函数

    fun test(){
        launch(Unconfined) {
            delay(1000)
            print("I am a Coroutine")
        }
        print("I am mainThread")
    }

这里写图片描述

launch()函数开启了一个协程,由于协程被挂起,所以协程之外的代码先被执行,又因为协程所处的上下文已经销毁,所以不能完整执行结束。

注意:suspend函数只能用于启动协程的函数(闭包)中

launch函数返回一个Job借口对象,可以对协程进行管理。

Job接口的常用方法有

  • isActive
  • isCompleted
  • isCanceled
  • start
  • cancel
  • join

Job的几种状态

这里写图片描述

协程的生命周期

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java线程Kotlin协程是在JVM上实现并发的两种不同方式。Java线程是JVM中的虚拟线程,而Kotlin协程是作为库函数实现的。区别主要体现在以下几个方面: 1. 语法:Java线程使用与Java中常规线程相同的语法,易于使用并与现有代码集成。而Kotlin协程使用与Kotlin中的常规线程不同的语法,需要一些学习和适应。但是,协程提供了一些优势和简化,例如结构化并发、取消或错误处理。 2. 性能:虚拟线程协程通常都比常规线程更高效,并且可以更有效地利用资源。然而,实际的性能优势将取决于具体的用例和实施。一些基准测试表明,类似于虚拟线程的Go Goroutines比Kotlin协程具有更好的性能,但其他基准测试表明Kotlin协程的性能优于Java虚拟线程。因此,总体上很难说哪一个更快或更好。 3. 成熟度:虚拟线程仍然是Project Loom的一个实验性功能,尚未成为官方Java版本的一部分。因此,它们不稳定或不受工具或库的广泛支持。相比之下,自2018年发布1.3版本以来,协程Kotlin的一个稳定功能,更可靠,并且得到工具或库的良好支持。 综上所述,Java线程Kotlin协程在语法、性能和成熟度方面存在一些区别。选择使用哪种方式取决于具体的需求和优先考虑的因素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java 虚拟线程Kotlin 协程](https://blog.csdn.net/qq_52010446/article/details/131465664)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值