关于协程的理解(未必正确,请勿参考)

说明

本人也是刚接触协程,理解可能有误,请勿参考。

协程本质上就是将代码分成了一块一块的,按照块来执行

 @Test
    public fun test1(){
     
        //runBlocking会阻塞线程,能保证里面的代码执行完,才会结束测试
        //如果不使用runBlocking(),可以在最下面使用Thread.sleep(10000)来保证前面的代码执行完,才结束测试
        runBlocking {
     
            //作为执行单元的第一个块
            launch {
     
                println("第一个执行单元开始执行.....")
                delay(1000)
                println("第一个执行单元执行完毕.....")
            }

            //作为执行单元的第二个块
            println("第二个执行单元开始执行.....")
            println("第二个执行单元执行完毕.....")

            //作为执行单元的第三个块
            launch {
     
                println("第三个执行单元开始执行.....")
                delay(3000)
                println("第三个执行单元执行完毕.....")
            }
        }
    }

说明

当第一个块碰到delay而挂起的时候,线程并不会等在那里,而是会选择其他可以执行的块去执行,比如第2个块。第2个块执行完毕之后,去执行第3个块,又碰到delay,第3个块也会被挂起,线程仍然不会等在这里,也会去找其他可以执行的块,比如等了1000ms之后,第一个块已经恢复了,可以被执行了,此时线程就会去执行第一个块。第一个块执行完毕之后,线程可能会空闲2s,然后第三个块恢复了,此时线程会去执行第三个块。

你可能感兴趣的:(协程,协程,kotlin)