1.Job.join() //阻塞
fun test2(){
runBlocking {
val job:Job = GlobalScope.launch {
val job2: Job = GlobalScope.launch(Dispatchers.IO) {
println("in 2")
delay(1000)
println("in 2 end" )
}
println("before job2")
println("in 0 end")
job2.join() // 前后有别
}
job.join()
}
}
2.no join() 非阻塞
fun test3(){
//job.join()//blocking
//no join() // unblocking
runBlocking {
val jjj = launch {
println("world 1 start")
delay(5000)
println("world 1 end")
}
launch {
println("world 2 start")
delay(1000)
println("world 2 end")
}
launch {
println("world 3 start")
delay(2000)
println("world 3 end")
}
}
}
3.withContext,scope.launch{}.join()比较
感觉一样,都是阻塞
runBlocking{
val job:Job = GlobalScope.launch {
println("A--start:${System.currentTimeMillis()}")
val job1 = withContext(Dispatchers.IO){
println("job1:start:${System.currentTimeMillis()}")
delay(1000)
println("job1:end:${System.currentTimeMillis()}")
}
println("middle,${System.currentTimeMillis()}")
val job2 = withContext((Dispatchers.IO))
{
println("job2:start:${System.currentTimeMillis()}")
delay(1000)
println("job2:end:${System.currentTimeMillis()}")
}
}
job.join()
}
4.async 同步 await()阻塞等待
fun test4(){
runBlocking {
val jjj = async {
println("start 1")
delay(5000)
println("end 1")
}
jjj.await()//until it's over
async {
println("start 2")
delay(1000)
println("end 2")
}
async {
println("start 3")
delay(500)
println("end 3")
}
}
}