当前位置: 首页 > news >正文

网站开发交流群360收录入口

网站开发交流群,360收录入口,网站页中繁体转移代码,苏州市建设职业中心网站Kotlin协程 背景定义实践GlobalScope.launchrunBlocking业务实践 背景 在项目实践过程中,笔者发现很多异步或者耗时的操作,都使用了Kotlin中的协程,所以特地研究了一番。 定义 关于协程(Coroutine),其实…

Kotlin协程

  • 背景
  • 定义
  • 实践
    • GlobalScope.launch
    • runBlocking
    • 业务实践

背景

在项目实践过程中,笔者发现很多异步或者耗时的操作,都使用了Kotlin中的协程,所以特地研究了一番。

定义

关于协程(Coroutine),其实更多的应该是一种并发设计模式。与传统的线程或进程相比,协程更加轻量级,因为它运行在线程之上,在执行过程中可以主动地暂停,并在需要时恢复执行。而且这些切换操作是在操作系统中的用户态完成的。

实践

  • 引入maven依赖:
<dependency><groupId>org.jetbrains.kotlinx</groupId><artifactId>kotlinx-coroutines-core</artifactId>
</dependency>
  • 两种启动模式
    • runBlocking
    • GlobalScope.launch

GlobalScope.launch

GlobalScope.launch 中启动的协程不会阻塞主线程。主线程会继续执行,而协程会在后台执行。在上述例子中,为了演示效果,使用了 Thread.sleep(2000) 来模拟等待协程执行。
其中,launch 是一个函数,用于创建协程并将其函数主体的执行分派给相应的调度程序。

fun main() {// 启动协程GlobalScope.launch {delay(2000) // 挂起协程,模拟异步操作println("World!")}println("Hello,")Thread.sleep(4000) // 阻塞主线程,等待协程执行完毕
}

runBlocking

runBlocking 中启动的协程会阻塞当前线程,直到所有启动的协程都执行完毕。

fun main() = runBlocking {// 在 runBlocking 作用域内启动协程launch {// 协程代码println("Inside coroutine")}// 主线程继续执行println("Outside coroutine")// 阻塞主线程,等待协程执行完毕
}

业务实践

  • Dispatchers.IO Kotlin提供的协程调度方式,指示此协程应在为 I/O 操作预留的线程上执行,适合在主线程之外执行磁盘或网络 I/O。
  • Dispatchers.Main 使用此调度程序可在主线程上运行协程。(在官方文档介绍中,主要用于安卓开发中,与界面交互和执行快速工作。)
  • Dispatchers.Default 适合在主线程之外执行占用大量 CPU 资源的工作。
private fun sendRefundHttpPost(weChatPayRefundUrl: String, xmlRequestData: String): Map<String, String> = runBlocking {// 启用协程发送退款操作return@runBlocking withContext(Dispatchers.IO) {val responseXmlStr = careWeChatHttps.postXmlForString(weChatPayRefundUrl, xmlRequestData)WXPayUtil.xmlToMap(responseXmlStr)}}
 private fun getSchoolDate(allTeacherIds: Set<String>): WildSchoolData = runBlocking {// 涉及统计的allTeacherIds 数量比较大, 创建异步任务去操作val elements = allTeacherIds.chunked(60).map {async(Dispatchers.Default) {val totalCount = teacherPerformanceServiceApi.getTeachersTotalPerformanceCount(it).performanceCountval currentWeekCount = teacherPerformanceServiceApi.getTeachersCurrentWeekPerformanceCountByByRangeTime(it).performanceCountWildSchoolData(totalCount, currentWeekCount)}}// 调用await等待异步任务结束return@runBlocking WildSchoolData(elements.awaitAll().sumBy { it.totalCount }, elements.awaitAll().sumBy { it.currentWeekCount })}
fun savePoint(pagePointVo: PagePointVo): Any {// 启用协程执行一个操作流水的插入, 不影响其他操作GlobalScope.launch(context = Dispatchers.IO) {val pagePoint = PagePoint().apply {this.schoolId = pagePointVo.schoolIdthis.userId = pagePointVo.userIdthis.userRole = pagePointVo.userRolethis.moduleKey = pagePointVo.moduleKeythis.eventId = pagePointVo.eventIdthis.clickTime = Date()}pagePointMapper.insert(pagePoint)}// 其他操作}
http://www.khdw.cn/news/38280.html

相关文章:

  • 营销型企业网站开发哪个网站百度收录快
  • 学校网站建设的必要性百度广告怎么推广
  • 邯郸网站建提升关键词
  • 免费做ppt的软件seo 网站排名
  • 做网站开源框架关于友谊的连接
  • 免费素材下载网站aso优化运营
  • 会员wordpress主题二十个优化
  • 常州市做网站的公司百度推广河南总部
  • 做网站的毕设用什么软件在线教育
  • 网站建设策划案模板新手怎么做电商运营
  • 广西建设工程质量安全监督总站网站宁波品牌网站推广优化公司
  • 简约中文网站设计欣赏qq推广官网
  • 济南迅翔网站建设个人在百度上发广告怎么发
  • 牡丹花网站建设策划书神马网站快速排名软件
  • 网页设计总结收获和体会网站优化策略分析
  • begin wordpress主题seo优化器
  • 果洛wap网站建设哪家好武汉楼市最新消息
  • 网络公司做网站服务器个人网站建设
  • 信用公示信息系统官网seo网站
  • app网站制作多少钱企业培训课程价格
  • asp做网站的步骤百度app手机版
  • 协会网站建设方案在线排名优化工具
  • php 网站开发流程百度健康
  • 国际要闻头条最新成都公司网站seo
  • 上饶婚纱工作室网站建设seo要点
  • 电商网站开发外包怎么在网上做广告
  • 做骗子网站宁波关键词优化企业网站建设
  • 做推广用那个网站迅雷磁力
  • 专业网站建设公司哪家专业加强网络暴力治理
  • 杭州网站建设网seo案例