zoukankan      html  css  js  c++  java
  • Kotlin协程第一个示例剖析及Kotlin线程使用技巧

    Kotlin协程第一个示例剖析:

    上一次https://www.cnblogs.com/webor2006/p/11712521.html已经对Kotlin中的协程有了理论化的了解了,这次则用代码来直观的感受一下协程,先用一个Hello World级别的示例来进行,这里新建一个工程:

    默认的gradle的配置如下:

    下面得修改一下,增加协程相关的依赖:

    此时编译完之后就会有如下依赖包:

    然后再建一个kotlin的源代码目录,目前只有一个java:

    好,接下来新建一个Kotlin的测试文件开始撸码:

    在我们之前编写的程序中都是用的带参数的main()方法,其实也可以不要参数,那咱们使用一下无参的main()方法:

    那协程怎么创建呢?先来回忆一下上一次的理论:

    但是CoroutineScope是一个接口,如下:

    所以这里得用它的实现类:

     

    而看一下GlobalScope这个类,就是它的实现类:

     

    下面来看一下运行效果:

    其中看一下协程中用到了一个delay(),看一下它的官方说明:

    根据这个解释,我们再来解释一下输出,在运行的时候会立马先打印出“hello”,这时因为协程的延迟是不会阻塞线程的:

     

    但是此时协程自己会休眠1秒,而接着主线程要休眠2秒:

    在这2秒过程中,休眠1秒的协程则会输出“Kotlin Coroutines”:

    最后过了2秒之后,主线程则继续执行,则“World”就打印了:

    那接下来如果将主线程的休眠时间由2秒改得比协程中的休眠更短呢?

    看结果:

    居然协程都木有输出,这是因为协程是依附于线程的,当线程都退出了,当然协程也不会执行了嘛,这点可以清楚的体会到协程的一个角色。

    Kotlin线程使用技巧:

    对于上面协程的效果其实可以用纯线程的方式来实现,这里来学习一下在Koltin中使用线程的一个标准姿势,跟Java还是有很大的区别的,如下:

    运行看一下:

    嗯,确实效果一样,但是它跟协程当然还是有区别的啦,毕境是用线程来模拟的,如果将主线程的休眠时间改短,则就不一样了,这里忽略,下面重点来理解Kotlin的这种创建线程的方式,先看一下这个thread是怎么定义的:

    其中返回的Thread是为Java的:

    那为啥我们在调用函数的时候直接跟了个花括号,而非圆括号?

    这就需要看一下该函数定义的参数声明了:

    这就是Kotlin的基本功的体现了,对于Kotlin的一个高阶函数而言,如果最后一个参数是Lambda表达式,则可以以花括号的形式来传给这个Lambda表达式,当然啦也可以用传统的方式来传递,比如:

    直接用句名的方式来显示指定要传的参数,但是!!!这种传统的写法不是Kotlin推崇的正统风格,所以需要适应这种写法,那还有个问题,为啥这样传递了之后我们的线程中的代码就能得到正常执行呢?

    此时就需要看一下它的官方说明了:

    而start默认值就是为true:

    所以这个问题的答案就可以知道了,好接下来继续来读读其它参数的含义:

    再来看一下此方法的具体实现,就知道为啥这个方法有这样创建线程的功效了:

    其中对象表达式在之前已经学习过了,可以参考:https://www.cnblogs.com/webor2006/p/11352421.html

    下面来做个实验,我们手动的来将start参数置为false,看下是否线程中的代码块就不会被执行了:

    确实如此,当然啦这时我们也可以以Java的思路将其手动启动既可,如下:

    但是!!!这不是一个正常使用Kotlin的姿势,如果用Java的思维来使用Kotlin这种是不对的,需要适应新的写法。

  • 相关阅读:
    前端基础学习分享
    IOS中block和代理
    最近一个项目的反思
    Coreseek Windows下安装调试
    iOS对象属性详解
    我眼里“维多利亚的秘密”中最性感的营销三点式
    用CSS制作带图标的按钮
    简单权限管理设计
    CentOS工作内容(三)配置网络IP地址
    CentOS工作内容(二)关闭SELinux
  • 原文地址:https://www.cnblogs.com/webor2006/p/11714647.html
Copyright © 2011-2022 走看看