协程测试demo

fun main() {
    println("1start----------" + Thread.currentThread())
    runBlocking() {
        println("2runBlocking----------" + Thread.currentThread())
        println("3runBlocking----------this.toString()=" + this.toString())

        this.launch {
            delay(1000)
            println("6world " + Thread.currentThread())
            launch {
                delay(500)
                println("8hello第2层 " + Thread.currentThread())
            }

            println("7hello11111111111 " + Thread.currentThread())
            delay(5000)

        }
        println("4测试顺序 " + Thread.currentThread())

        println("5end----------" + Thread.currentThread())
    }


    println("9end----------" + Thread.currentThread())

}
1start----------Thread[main,5,main]
2runBlocking----------Thread[main,5,main]
3runBlocking----------this.toString()=BlockingCoroutine{Active}@6325a3ee
4测试顺序 Thread[main,5,main]
5end----------Thread[main,5,main]
6world Thread[main,5,main]
7hello11111111111 Thread[main,5,main]
8hello第2Thread[main,5,main]
9end----------Thread[main,5,main]

runBlocking 内部代码块执行完毕,才会执行后面的代码,阻塞当前的线程。

fun main() {
    println("1start----------" + Thread.currentThread())
    runBlocking(context = kotlinx.coroutines.Dispatchers.IO) {
        println("2runBlocking----------" + Thread.currentThread())
        println("3runBlocking----------this.toString()=" + this.toString())

        runBlocking {
            delay(1000)
            println("6world " + Thread.currentThread())
            launch {
                delay(500)
                println("8hello第2层 " + Thread.currentThread())
            }

            println("7hello11111111111 " + Thread.currentThread())
            delay(5000)

        }
        println("4测试顺序 " + Thread.currentThread())

        println("5end----------" + Thread.currentThread())
    }


    println("9end----------" + Thread.currentThread())

}

1start----------Thread[main,5,main]
2runBlocking----------Thread[DefaultDispatcher-worker-2,5,main]
3runBlocking----------this.toString()=BlockingCoroutine{Active}@6728c30
6world Thread[DefaultDispatcher-worker-2,5,main]
7hello11111111111 Thread[DefaultDispatcher-worker-2,5,main]
8hello第2Thread[DefaultDispatcher-worker-2,5,main]
4测试顺序 Thread[DefaultDispatcher-worker-2,5,main]
5end----------Thread[DefaultDispatcher-worker-2,5,main]
9end----------Thread[main,5,main]

内部也阻塞了,按照顺序执行

多个子协程并发,不阻塞的方式

fun main() {
    runBlocking {
        // val job =
        launch {
            delay(2000)
            println("4hello world")
        }

        launch {
       //     delay(1000)
            println("3hello world")
        }
        println("1hello")
        //  job.join()
        println("2done")
    }
    println("end   done")
}



方法2
suspend fun doWorld4() = coroutineScope {
///coroutineScope{}可以在suspend暂停函数中执行并发操作
//比如开启多个launch{} ,多个协程运行完,coroutineScope{}才结束
    launch {
        delay(2000L)///delay() 是一个特殊的暂停or悬挂函数
        println("World 2")
    }

    println("doWorld4 ---------------分割")

    launch {
        delay(4000L)
        println("World 1")
    }


    println("doWorld4  Hello")
}


fun main() {
    println("main  runBlocking ")
    runBlocking {
        println("start  runBlocking ")
        doWorld4()
        println("end  runBlocking ")
    }

    println("main  runBlocking ")


}


阻塞写法 withContext
fun main() {
    GlobalScope.launch {
        withContext(kotlinx.coroutines.Dispatchers.IO){
            delay(3000)
            println("2 withContext")
        }
        println("222 withContext")
        withContext(kotlinx.coroutines.Dispatchers.IO){

            delay(100)
            println("1 withContext")
        }
        println("111 withContext")

    }
    Thread.sleep(5555)
    println("end withContext")
}

2 withContext
222 withContext
1 withContext
111 withContext
end withContext


异步async
fun main() {
    GlobalScope.launch {
        async(kotlinx.coroutines.Dispatchers.IO){
            delay(3000)
            println("2 withContext")
        }
        println("22 withContext")
        async(kotlinx.coroutines.Dispatchers.IO){

            delay(100)
            println("1 withContext")
        }
        println("111 withContext")

    }
    Thread.sleep(5555)
    println("end withContext")
}

22 withContext
111 withContext
1 withContext
2 withContext
end withContext

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值