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

tech2023-09-18  102

说明

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

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

@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,然后第三个块恢复了,此时线程会去执行第三个块。

最新回复(0)