协程的创建

2023-05-16

GlobalScope.launch

  • 使用(代码会在当前线程所有内容执行完成之后再执行)

    //新建线程,执行 "延时 1 秒,打印当前线程名称" 的代码
    GlobalScope.launch{
                delay(1000)
                Log.d(TAG, "createCoroutinesOne: ${Thread.currentThread().name}")
            }
    
    //在主线程中执行 "延时 1 秒,打印当前线程名称" 的代码
    GlobalScope.launch(Dispatchers.Main){
                delay(1000)
                Log.d(TAG, "createCoroutinesOne2: ${Thread.currentThread().name}")
            }
    
    //新建线程,执行 "延时 1 秒,打印当前线程名称" 的代码,在调用后,直接执行
    GlobalScope.launch(newSingleThreadContext("bin"), CoroutineStart.DEFAULT){
                delay(1000)
                Log.d(TAG, "createCoroutinesOne4: ${Thread.currentThread().name}")
            }
    
  • 参数

    public fun CoroutineScope.launch(
        context: CoroutineContext = EmptyCoroutineContext,
        start: CoroutineStart = CoroutineStart.DEFAULT,
        block: suspend CoroutineScope.() -> Unit
    ): Job {
    ...
    }
    
    • context: CoroutineContext
      协程调度器
    • start: CoroutineStart
      协程的启动模式
    • block: suspend CoroutineScope.()
      执行内容

runBlocking

  • 使用(代码会在调用位置直接执行。runBlocking 作用域内 launch 启动的代码,会在runBlocking 代码块其他代码执行完之后继续执行)

    runBlocking {
                delay(1000)
                Log.d(TAG, "createCoroutinesTwo3: ${Thread.currentThread().name}")
            }
    
    runBlocking{
                launch {
                    delay(1000)
                    Log.d(TAG, "createCoroutinesTwo: ${Thread.currentThread().name}")
                }
                Log.d(TAG, "createCoroutinesTwo2: ${Thread.currentThread().name}")
            }
    
  • 参数

    public fun <T> runBlocking(
    context: CoroutineContext = EmptyCoroutineContext,
     block: suspend CoroutineScope.() -> T): T {
    ...
    }
    
  • context: CoroutineContext = EmptyCoroutineContext
    协程调度器

  • block: suspend CoroutineScope.()
    执行内容

Dispatchers(协程调度器)

  • Dispatchers.Default
    在线程池中执行。适合CPU密集型的任务,比如解析JSON文件,排序一个较大的list
  • Dispatchers.Main
    表示主线程
  • Dispatchers.IO
    在线程池中执行。针对磁盘和网络IO进行了优化,适合IO密集型的任务,比如:读写文件,操作数据库以及网络请求
  • Dispatchers.Unconfined
    在调用的线程直接执行
  • newSingleThreadContext(name: String)
    使用新的线程

CoroutineStart(启动模式)

  • CoroutineStart.DEFAULT
    默认,不传或传入此参数会立即执行协程
  • CoroutineStart.LAZY
    launch后不立即执行,需要获取其job发起执行
  • CoroutineStart.UNDISPATCHED
    在协程代码块中优先级更高,更快执行
  • CoroutineStart.ATOMIC
    执行前不可取消的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

协程的创建 的相关文章

  • Spring入门详解(一)如何配置一个简单的spring项目

    关于spring的一些概念 xff0c 网上已经有很多的说明 xff0c 本系列不会做太多的描述 xff0c 重心在如何配置上 一 准备工作 1 安装JDK xff0c 配置环境 本来不想写这条的 想了想 xff0c 还是写上 2 下载开发
  • 超简洁的群晖交叉编译教程

    超简洁的群晖交叉编译教程 最近把一个群晖的NAS放在校园网里的时候遇到了锐捷认证的问题 xff0c 找了一下没有现成的程序可以拿来用 xff0c 然后自己交叉编译一个mentohust来用 1 环境 Ubuntu20 04 xff0c 先去
  • 基于docker部署nextcloud及其升级和问题修复

    之前用docker部署了一个版本的nextcloud xff0c 但是当时版本中存在一些bug xff0c 所以想升级一下 油管上有博主直接在nextcloud设置里更新的而且能用 这是地址 xff0c 懂的都懂 xff0c 但是我在nex
  • TFRecord的一些用法

    1 TFRecord的用法 首先 xff0c TFRecord是把你的数据存成文件的一个东西 所以首先要有个写文件的东西 xff0c 就是 writer span class token operator 61 span tf span c
  • rsync --exclude或者--exclude-from的路径问题

    先开个头 xff0c 注意 的使用 假设有 my src dir a 把 my src dir复制到 my dst dir xff0c 结果 my dst dir my src dir a rsync a my src dir my dst
  • Sentry迁移:从一台机器到另一台机器

    搜了一下 xff0c 目前写部署的帖子很多 xff0c 但是没找到比较完善的迁移的帖子 xff0c 记一下自己的方法吧 思路 因为现在基本都是使用docker部署 xff0c 所以常规思路大概是docker容器的迁移 xff0c 但是现在s
  • Android studio 2.3.3+Dlib

    最近因为需要 xff0c 尝试着将Dlib移植到android上 android小白一枚 xff0c 做之前没接触过android xff0c 所以就用了别人说比较好的android studio 最新稳定版 xff08 windows下
  • 用verilog实现L293D 驱动板接口

    课程实验做了一个蓝牙智能小车 xff0c nexys4开发板 xff0c MIPSfpga xff08 一个在 FPGA 上实现的商业 MIPS 处理器软核 xff0c Imagination Technologies公司提供给高校免费使用
  • 斐讯k2p openwrt固件改双WAN口

    原理参考教你玩转K2P A1 A2 官改版VLAN 步骤 xff1a network配置 xff0c etc config network里把wan的ifname由原来的eth1改成eth1 2增加wan2 xff0c eth1 3dhcp
  • windows 10安装Anaconda后pip报SSL错解决

    问题 新装的系统 xff0c 安装anaconda python 61 3 7 后 pip install xxx pip is configured with locations that require TLS SSL however
  • JSP中文乱码问题终极解决方案

    在介绍方法之前我们首先应该清楚具体的问题有哪些 xff0c 笔者在本博客当中论述的 JSP 中文乱码问题有如下几个方面 xff1a 页面乱码 参数乱码 表单乱码 源文件乱码 下面来逐一解决其中的乱码问题 一 JSP 页面中文乱码 在 JSP
  • ubuntu lightdm test用户自动登陆

    1 编辑 etc lightdm lightdm conf d 50 myconfig conf 内容 SeatDefaults autologin user 61 test 注意此处是自己要登陆的用户名字
  • 猴小萌的博客开通啦

    多年痴迷计算机技术 xff0c 孜孜不倦地学习着计算机的一切 xff0c 享受着计算机带给我的乐趣和满足感 然而有一天 xff0c 突然发现我所获得的知识和问题的答案基本上全部都来自于网络 xff0c 却从来没有为社区奉献过 xff0c 上
  • Cesium入门(一):第一张Cesium页面

    本章主要讲述如何下载和使用Cesium xff0c 编写完成自己的第一张Cesium应用页面 主要从以下几个方面展开叙述 xff1a 下载和部署CesiumJS编写第一张Cesium页面 1 下载和部署CesiumJS CesiumJS是一
  • Cesium入门(二):Viewer控件参数与外观定制

    本章主要介绍Cesium Viewer控件的选项参数 xff0c 以及如何对Viewer的外观进行定制 主要包括以下内容 xff1a Viewer控件Viewer选项参数定制Viewer外观界面 1 Viewer控件 Viewer是构建Ce
  • Cesium入门(三):加载WMS地图服务

    本章介绍Cesium Viewer控件的是如何加载地图的 xff0c 并以GeoServer服务器为例演示了WMS服务的加载过程 主要包括以下内容 xff1a ImageryProvider加载GeoServer发布的WMS服务 在Cesi
  • Cesium入门(四):叠加显示多个图层

    本章介绍Cesium Viewer控件的imageryLayers容器 xff0c 了解添加和叠加显示多个图层的方法 主要包括以下内容 xff1a imageLayers图层容器添加多个图层 1 imageryLayers图层容器 imag
  • GeoServer入门(一):发布第一个WMS图层

    本章主要讲述如何下载和安装使用GeoServer服务器 xff0c 介绍了GeoServer的管理界面 xff0c 并演示了发布地理数据的简单流程 主要从以下几个方面展开叙述 xff1a 下载和安装GeoServerGeoServer管理界
  • FreeBSD内存交换文件的设置与自动加载

    本文主要讲述FreeBSD操作系统下内存交换文件的作用及其自动加载过程 xff0c 主要从以下几个方面展开叙述 xff1a 交换文件的设置交换文件的自动加载 交换文件是虚拟内存机制的重要组成部分 xff0c 在物理内存不够用时可以临时将不常
  • GeoServer入门(二):WMTS图层瓦片切割与调用

    本章主要讲述如何GeoServer进行图层瓦片切割与缓冲 xff0c 发布标准的WMTS服务 xff0c 并介绍了REST格式的调用参数 主要包含以下内容 xff1a 图层切片与缓冲WMTS服务调用 在GeoServer入门 xff08 一

随机推荐

  • Cesium入门(五):加载WMTS瓦片地图服务

    本章介绍Cesium JS库的WebMapTileServiceImageryProvider类 xff0c 并以GeoServer为例演示了在CesiumViewer控件中添加瓦片图层的方法 主要包括以下内容 xff1a WebMapTi
  • 深入学习Tomcat----自己动手写服务器(附服务器源码)

    相信大多 Web 开发者对 Tomcat 是非常熟悉的 xff0c 众所周知 Tomcat 是一款非常好用的开源 Servlet 容器 xff0c 您一定对这个最流行的 Servlet 容器充满好奇 xff0c 虽然它并不像一个黑盒子那样让
  • Cesium入门(六):加载EPSG4326网格的瓦片地图

    本章介绍Cesium JS库的TilingScheme类 xff0c 并以GeoServer服务器为例演示了加载EPSG 4326网络的瓦片地图 主要包括以下内容 xff1a TilingScheme添加EPSG 4326瓦片图层 在Ces
  • Cesium入门(七):设置影像图层的覆盖范围

    本章介绍Cesium JS库的Rectangle类 xff0c 并以GeoServer服务器为例演示了在加载EPSG 4326网格的瓦片地图时 xff0c 通过设置rectangle参数来限定图层的覆盖范围 主要包括以下内容 xff1a R
  • Wget下载网页与镜像网站

    本文主要介绍GNU Wget实用程序及其在在FreeBSD操作系统下的安装过程 xff0c 并对几个最常用的下载功能进行了说明 xff0c 主要包括以下几个方面 xff1a GNU Wget概述Wget程序安装Wget常用功能 1 GNU
  • 使用cron定时执行任务

    本文主要介绍Unix系统中用于定时执行任务的cron守护程序和crontab配置表的文件格式 xff0c 并对自动执行脚本文件时的注意事项进行了说明 xff0c 主要包括以下几个方面 xff1a cron守护程序概述crontab配置表cr
  • 用Imagex备份&还原Windows7简明教程+本人编写的批处理+解说Imagex常用命令

    用Imagex备份 amp 还原Windows7简明教程 43 本人编写的批处理 43 解说Imagex常用命令 2012 03 26 23 32 53 分类 xff1a Windows 7 探索实 标签 xff1a 举报 字号 大 中 小
  • Android 硬件版本问题(M/Q/O/RM)

    M gt MTK Q gt 高通 O gt 海外 RM gt 国内 个人理解 xff1a 软件在编写的过程中 xff0c 为了适配不同的硬件 处理器 xff0c 要搞不同的内置版本
  • 学成在线笔记三:CMS管理页面开发

    注意 xff1a 我是用的element ui的版本位 xff1a 2 10 1 xff0c 若要使用本博客中的前端代码 xff0c 建议修改为相同版本 修改方式 xff1a 修改根目录下的package json中dependencies
  • vue3 和 vite3脚手架相关20个库

    学会这 20 个库 xff0c 让你快速看懂 vue3 和 vite3 源码 x1f680 前言 写一个开源的项目也不例外 xff0c 就拿在国内很火的 vue3 框架 和 vite 工具 来讲 xff0c 其中的实现与架构设计无不是一个
  • SQL高级优化

    知识回顾 1 git版本控制工具 xff0c 主要管理项目的代码文件 它相比CVS SVN它特点 xff0c 可支持分布式 外网 离线工作 主流代码管理工具 2 xff09 基本概念 工作空间 本地索引 本地仓库 远程仓库 就体积而言 xf
  • windows批处理:暂停的处理

    参考 xff1a https www cnblogs com yulinlewis p 10074565 html 总结 xff1a 1 ping n 1 127 1 127 1是127 0 0 1 xff0c 被称为本地回环地址 xff0
  • 如何减小与“大牛”的差距

    为什么同样的时间有的人可以漂亮的完成工作 xff0c 而有些人废了很大的力气也没有完成 xff1f 前者我们常常称之为 大牛 xff0c 后者我们常常叫他们 菜鸟 当然 大牛 都是相对而言的 xff0c 大牛 也不可能方方面面都非常厉害 x
  • Android Studio:模拟器启动后不停闪烁

    解决方法 xff1a graphics选择Software
  • java基于springboot+vue的企业员工人事工资薪酬管理系统 elementui

    系统主要分为管理员和普通用户和员工三部分 主要功能包括个人中心 普通用户管理 员工管理 人事档案管理 部门管理 薪酬管理 人事调动管理 职务管理 培训管理 招聘信息管理 求职简历管理 邀请面试管理 录用信息管理 员工应聘管理 系统管理等功能
  • Unity设置横竖屏

    Unity设置横竖屏 使用开发工具设置 xff08 工程统一设置 xff09 使用代码设置 xff08 可以分开设置不同场景 xff09 使用开发工具设置 xff08 工程统一设置 xff09 使用代码设置 xff08 可以分开设置不同场景
  • 网络错误 Unable to resolve host

    1 没有网络权限 2 没有网络 3 防火墙阻止
  • Android 项目中 Mopub 广告基础使用(插屏和横幅)

    1 下载 MoPub Android SDK repositories mavenCentral MoPub SDK is now available in Maven Central android compileOptions sour
  • Camera2打开相机,建立会话,并监听相机流(以拍照为例)

    Camera2打开相机 xff0c 建立会话 xff0c 并监听相机流 xff08 以拍照为例 xff09 获取 CameraManager通过 CameraManager openCamera 方法打开相机 xff0c 监听回调 xff0
  • 协程的创建

    GlobalScope launch 使用 xff08 代码会在当前线程所有内容执行完成之后再执行 xff09 新建线程 xff0c 执行 34 延时 1 秒 xff0c 打印当前线程名称 34 的代码 GlobalScope launch