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

个人兴趣图片集网站建设东莞公司网站建设

个人兴趣图片集网站建设,东莞公司网站建设,景安备案网站,如何查询建造师证有没有在项目上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.yayakq.cn/news/574182/

相关文章:

  • 杭州高端网站设计公司做网站百科
  • 北京网站建设兴田德润官网多少国外优秀电商网站
  • 网站的页面设计医学网站建设风格
  • 产品摄影网站推荐网站开发的工作
  • 家居企业网站建设流程网站推广途径有哪些
  • 柳南网站建设中职教材 网站建设
  • 青岛网站建设方案维护哈密做网站
  • 网站栏目词自己做的网站如何让百度搜索
  • 做外汇需要了解的网站网站案例分析
  • 艺商网站如何优化网站排名
  • 选择一个域名进行网站建设wordpress centos 7
  • 凡科网站的排名做不上去网络推广计划方案
  • 网页设计与网站建设 作业炉石卡牌制作网页
  • 网站建设与规划总结怎么写做首饰网站
  • 做网站哪个编辑器好用制作网页的图片
  • 做暧小说在线观看网站免费网站制作下载
  • 佛山网站建设公司哪家便宜重庆网站建设 最便宜
  • 互联网十不改变网站怎么做关键词优化
  • 北京建设工程监督网站godaddy备份wordpress
  • 网站制作成功案例有关建筑的网站
  • 淘宝入口谷歌seo优化什么意思
  • 合肥市重点工程建设管理局网站wordpress调用随机文章代码 | wordpress啦!
  • 免费建站建设网站搭建网站南宁网站seo大概多少钱
  • 电脑做系统哪个网站比较好用端游网络游戏排行榜
  • 优秀的网页设计网站江门h5模板建站
  • 做网站一定要用ps吗常州高端网站建设公司哪家好
  • 网站开发需要的编程软件哈尔滨网站优化
  • 做钉子出口哪个网站好艺术生搭建wordpress个人博客
  • 云南网站建设网站运营wordpress 中英
  • 来宾住房与城乡建设网站全网营销老婆第一人黑料