栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【备忘录】Kotlin协程(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【备忘录】Kotlin协程(二)

(8)


fun main() = runBlocking {

    val myJob = GlobalScope.launch {
        repeat(200) {
            println("hello $it")
            delay(500)
        }
    }

    delay(1100)
    println("Hello World")

    //协程取消
    myJob.cancel()
    //join()作用:等待启动的线程的任务完成
    myJob.join()

//    myJob.cancelAndJoin()// 取消一个作业并且等待它结束

    println("Welcome")
}

运行结果

hello 0
hello 1
hello 2
Hello World
Welcome

( 9 )


fun main() = runBlocking {

    val startTime = System.currentTimeMillis()
    val job = launch(Dispatchers.Default) {
        var nextPrintTime = startTime
        var i = 0
        while (i < 10) {
            if (System.currentTimeMillis() >= nextPrintTime) {
                println("job: I am sleeping ${i++}")
                nextPrintTime += 500L
            }
        }
    }

    delay(1300)
    println("Hello World")

    job.cancelAndJoin()
    println("Welcome")
}
job: I am sleeping 0
job: I am sleeping 1
job: I am sleeping 2
Hello World
job: I am sleeping 3
job: I am sleeping 4
job: I am sleeping 5
job: I am sleeping 6
job: I am sleeping 7
job: I am sleeping 8
job: I am sleeping 9
Welcome

(10)


fun main() = runBlocking {

    val startTime = System.currentTimeMillis()
    val job = launch(Dispatchers.Default) {
        var nextPrintTime = startTime
        var i = 0
        while (isActive) {
            if (System.currentTimeMillis() >= nextPrintTime) {
                println("Job: I am sleeping ${i++}")
                nextPrintTime += 500L
            }
        }
    }

    delay(1300)
    println("Hello world")

    job.cancelAndJoin()//将while的active变为false
    println("Welcome")
}
Job: I am sleeping 0
Job: I am sleeping 1
Job: I am sleeping 2
Hello world
Welcome

(11)


fun main() = runBlocking {

    val myjob = launch {
        try {
            repeat(100) {
                println("job: I am sleeping $it")
                delay(500)
            }
        } finally {
            println("执行了finally块")
        }
    }

    delay(1300)
    println("Hello World")

    myjob.cancelAndJoin()
    println("Welcome")
}
job: I am sleeping 0
job: I am sleeping 1
job: I am sleeping 2
Hello World
执行了finally块
Welcome

(12)


fun main() = runBlocking {

    val myjob = launch {
        try {
            repeat(100) {
                println("job: I am sleeping $it")
                delay(500)
            }
        } finally {
            withContext(NonCancellable) {
                println("执行了finally块")
                delay(1000)
                println("在delay后执行的代码块")
            }
        }
    }

    delay(1300)
    println("Hello World")

    myjob.cancelAndJoin()
    println("Welcome")
}
job: I am sleeping 0
job: I am sleeping 1
job: I am sleeping 2
Hello World
执行了finally块
在delay后执行的代码块
Welcome

(13)


fun main() = runBlocking {

    withTimeout(1900) {
        repeat(1000) {
            println("Hello $it")
            delay(400)
        }
    }
}
Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
Exception in thread "main" kotlinx.coroutines.TimeoutCancellationException:
 Timed out waiting for 1900 ms
	at kotlinx.coroutines.TimeoutKt.TimeoutCancellationException(Timeout.kt:158)
	at kotlinx.coroutines.TimeoutCoroutine.run(Timeout.kt:128)
	at kotlinx.coroutines.EventLoopImplbase$DelayedRunnableTask.run(EventLoop.common.kt:497)
	at kotlinx.coroutines.EventLoopImplbase.processNextEvent(EventLoop.common.kt:274)
	at kotlinx.coroutines.DefaultExecutor.run(DefaultExecutor.kt:68)
	at java.lang.Thread.run(Thread.java:748)

(14)


fun main() = runBlocking {
    val result = withTimeoutOrNull(1900) {
        repeat(2) {
            println("hello,$it")
            delay(300)
        }

        "hello world"
    }

    println("result is $result")
}
hello,0
hello,1
result is hello world
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462751.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号