(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



