首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

再谈协程之suspend到底挂起了啥

作为一个开发者,你可以把suspend函数看作是一个普通的函数,但它的执行可能被挂起,并在某个时候恢复。 ❝简而言之,suspend就是一种编译器生成的回调。...但是,当我们把函数标记为suspend时,编译器实际上在幕后做了什么? Suspend到底做了什么 回到loginUser的suspend函数,注意它调用的其他函数也是suspend函数。...在协程中,有个不成文的约定,那就是,suspend函数默认是不阻塞线程的,也就是说,suspend函数的调用者,不用为suspend函数运行在哪个线程而担心,suspend函数会自己处理它工作的线程,不大部分时候...❞ Kotlin编译器将识别函数何时可以在内部suspend。每个suspend point都将被表示为有限状态机中的一个状态。...从这个suspend函数功能来举例。

88010

为什么不推荐使用 stop、suspend 方法中断线程?

我们知道像stop、suspend这几种中断或者阻塞线程的方法在较高java版本中已经被标记上了@Deprecated过期标签,那么为什么她们曾经登上了java的历史舞台而又渐渐的推出了舞台呢?...二、suspend的落幕 suspend方法的作用是挂起某个线程直到调用resume方法来恢复该线程,但是调用了suspend方法后并不会释放被挂起线程获取到的锁,正因如此就给suspend和resume...这哥俩贴上了容易引发死锁的标签,当然这也正是导致suspend和resume退出历史舞台的罪魁祸首。...同样我们看看java开发者为suspend的淘汰给出的理由: This method has been deprecated, as it is inherently deadlock-prone....从中我们可以得出以下结论: suspend具有天然的死锁倾向 当某个线程被suspend后,该线程持有的锁不会被释放,其他线程也就不能访问这些资源 suspend某个线程后,如果在resume的过程中出现异常导致

77230

为什么不推荐使用 stop、suspend 方法中断线程?

作者 | 浪舟子 来源 | https://blog.csdn.net/qq_40400960/article/details/112651249 我们知道像stop、suspend这几种中断或者阻塞线程的方法在较高...二、suspend的落幕 suspend方法的作用是挂起某个线程直到调用resume方法来恢复该线程,但是调用了suspend方法后并不会释放被挂起线程获取到的锁,正因如此就给suspend和resume...这哥俩贴上了容易引发死锁的标签,当然这也正是导致suspend和resume退出历史舞台的罪魁祸首。...同样我们看看java开发者为suspend的淘汰给出的理由: This method has been deprecated, as it is inherently deadlock-prone....从中我们可以得出以下结论: suspend具有天然的死锁倾向 当某个线程被suspend后,该线程持有的锁不会被释放,其他线程也就不能访问这些资源 suspend某个线程后,如果在resume的过程中出现异常导致

47320

Kotlin Vocabulary | 揭秘协程中的 suspend 修饰符

Kotlin 协程把 suspend 修饰符引入到了我们 Android 开发者的日常开发中。您是否好奇它的底层工作原理呢?编译器是如何转换我们的代码,使其能够挂起和恢复协程操作的呢?...了解这些将会帮您更好地理解挂起函数 (suspend function) 为什么只会在所有工作完成后才会返回,以及如何在不阻塞线程的情况下挂起代码。...Suspend 的工作原理 回到 loginUser 挂起函数,注意它调用的另一个函数也是挂起函数: suspend fun loginUser(userId: String, password: String...编译器将会在函数签名中使用额外的 completion 参数 (Continuation 类型) 来代替 suspend 修饰符。...同时,您也能知道 suspend 是如何做到不阻塞线程的: 当方法被恢复时,需要被执行的信息全部被存在了 Continuation 对象之中!

2.1K10

【Kotlin 协程】协程的挂起和恢复 ① ( 协程的挂起和恢复概念 | 协程的 suspend 挂起函数 )

文章目录 一、协程的挂起和恢复概念 二、协程的 suspend 挂起函数 一、协程的挂起和恢复概念 ---- 函数 最基本的操作 是 : 调用 call : 通过 函数名或函数地址 调用函数 ; 返回...函数 , 将 挂起点的信息 记录下来 , 然后执行耗时操作 , 执行完毕后 恢复 Resume ; 二、协程的 suspend 挂起函数 ---- 声明挂起函数 , 使用 suspend 在 fun...修饰 ; public suspend fun Test() { asynTask() updateMain() } public suspend fun asynTask() { // 子线程中执行异步任务...} public fun updateMain() { // 主线程更新 UI } 分析上述 挂起 suspend 函数 Test() 的 调用流程 : 执行 suspend fun Test()..., 先进行 挂起 suspend 操作 , ( 此时栈帧内容 : Test 函数 | asynTask 函数 , 左侧是栈底 ) 然后执行异步任务 , 异步任务执行完毕后 , 恢复 resume suspend

1.5K40
领券