首页 > 其他分享 >Kotlin学习之协程

Kotlin学习之协程

时间:2024-05-15 22:42:14浏览次数:14  
标签:之协程 协程 Kotlin 阻塞 学习 kotlinx coroutines println import

前言

协程是轻量级的线程。maven项目需要引入一下依赖

<!--kotlin基础库-->
<dependency>
  <groupId>org.jetbrains.kotlin</groupId>
  <artifactId>kotlin-stdlib-jdk8</artifactId>
  <version>${kotlin.version}</version>
</dependency>
<!--协程支持库-->
  <dependency>
  <groupId>org.jetbrains.kotlinx</groupId>
  <artifactId>kotlinx-coroutines-core</artifactId>
  <version>1.3.9</version>
</dependency>

非阻塞式协程

import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

fun main() {
    GlobalScope.launch {  // 启动一个非阻塞协程
        delay(1000)       // 等待1秒钟
        println("协程")   // 在延迟后打印输出
    }
    println("Hello")     // 协程已在等待时主线程还在继续
    Thread.sleep(2000)   // 阻塞主线程2秒钟来保证JVM存活
    println("World")
}

协程在JVM主线程执行结束之后也会结束,所以需要主线程阻塞2秒钟来保证协程已经执行完毕了,它的功能使用线程的写法为

import kotlin.concurrent.thread

fun main() {
    thread {               // 创建一个线程
        Thread.sleep(1000) 
        println("协程")
    }
    println("Hello")
    Thread.sleep(2000)
    println("World")
}

非阻塞协程就类似于守护线程。

阻塞式协程

import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking

fun main() {
    runBlocking {    // 启动一阻塞式协程
        delay(1000)
        println("协程")
    }
    println("World")
}

创建一个协程,且会一直阻塞到协程逻辑执行完,主线程才会继续执行。

参考

Kotlin协程

标签:之协程,协程,Kotlin,阻塞,学习,kotlinx,coroutines,println,import
From: https://www.cnblogs.com/strongmore/p/16328262.html

相关文章

  • kotlin-stdlib-jdk8 的作用
    在kotlin1.8.0之前,kotlin的标准库kotlin-stdlib的jvmTarget是Java1.6,但是如果程序的jvmTarget是1.7或1.8,则可以手动添加kotlin-stdlib-jdk7或kotlin-stdlib-jdk8来使用kotin对相关Java版本提供的API(如:Java1.7中AutoCloseable相关的API和Java1.8......
  • 如何摆脱[自我/当下]而考虑到[别人/将来],从而主动为群体和将来行动 在学习通提交解
    培养同理心:尝试从他人的角度看待问题,理解他们的感受和需求。倾听他人:积极倾听并尊重他人的观点和意见,这有助于你更好地理解他们。拓宽视野:阅读、旅行和学习新事物可以帮助你了解不同的观点和文化。长期规划:设定长期目标,并考虑这些目标如何影响你的未来和他人。合作......
  • 【django学习-28】列表界面模板下载与上传文件
    前言,我们在实际项目开发过程中,经常有列表界面,有上传功能,并且支持先下载模板,后上传1.实现效果与前端展示<formmethod="post"enctype="multipart/form-data"action="/depart/multi/">{%csrf_token%}<divclass="form-group"><inputtyp......
  • 【django学习-27】media介绍与文件上传
    前言:django开发过程中,有2个文件夹(也即:目录)比较特殊:static文件夹(目录)、media文件夹(目录)。static目录:我们项目自己用到的文件(css、js、项目图片、插件),建议放在static目录下。media目录:用户自己上传的文件等资源,建议放在media目录下。要想用media目录,必须先配置启用它。1.me......
  • C#学习笔记-委托
    委托  委托类似于C/C++中的函数指针。委托存储对方法的引用,可以按照某些约束指向目标方法,间接地调用这些方法。//C#include<stdio.h>typedefint(*Calc)(intx,inty);intAdd(intx,inty){ returnx+y;}intSub(intx,inty){ returnx-y;}intmain......
  • 【django学习-26】图片验证码
    1.我们在登录的时候,经常看到输入用户名、密码之外。还需要输入验证码。这个验证码是怎么实现的呢?2.前端{%loadstatic%}<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><linkrel="styleshee......
  • 【django学习-25】登录及使用中间件进行登录校验
    1.登录功能实现1.1:管理员表fromdjango.dbimportmodelsclassAdmin(models.Model):"""管理员"""username=models.CharField(verbose_name="用户名",max_length=32)password=models.CharField(verbose_name="密码......
  • 比较不同团队的绩效评估方法;提出自己团队的绩效评估计划在学习通提交解答的同时,可以
    ]比较不同团队的绩效评估方法;提出自己团队的绩效评估计划在学习通提交解答的同时,可以同步发布在团队和个人博客上,作为学习心得体会,记录下来【第二组】答:不同团队的绩效评估方法会因公司文化、业务需求和团队特点而有所不同。以下是一些常见的团队绩效评估方法,以及可能适用于你......
  • 为何要讲人、绩效、和职业道德? 学好专业不就行了么,为何要扯这么多?在学习通提交解答的
    为何要讲人、绩效、和职业道德?学好专业不就行了么,为何要扯这么多?在学习通提交解答的同时,可以同步发布在团队和个人博客上,作为学习心得体会,记录下来。【第二组】答:讲人、绩效和职业道德在团队和职业发展中的重要性不容忽视,尽管学好专业是基础,但以下几个原因解释了为什么还需要......
  • 何摆脱[自我/当下]而考虑到[别人/将来],从而主动为群体和将来行动在学习通提交解答的同
    ]如何摆脱[自我/当下]而考虑到[别人/将来],从而主动为群体和将来行动在学习通提交解答的同时,可以同步发布在团队和个人博客上,作为学习心得体会,记录下来。我的答案:【第二组】答:摆脱自我而考虑到别人和将来,从而主动为群体和未来行动,是一种高度发展的社会情感和道德责任感。这种......