【2025最新版Kotlin教程】Kotlin第一行代码系列第十六课-协程创建
为了看在那个线程上,我们改下Android Studio的配置。点击在底下run项上,然后再点击左边像把手的图标,在弹出框中的VM options项里面输入:-Dkotlinx.coroutines.debug
创建协程示例代码:
fun main() {
/**
* 方式1:launch
* 注意:在真实项目开发中,是不用GlobalScope的
*/
GlobalScope.launch {
//这里就是协程域了,可以调任何协程的方法
println("Hello 协程1")
// 协程的延迟操作,后面的代码要等延迟跑完
delay(1000L)
println("Hello 协程")
}
// 延迟主线程,要不main函数一瞬间就跑完,进程就结束了,自然你就看不到上面协程的输出了
Thread.sleep(2000L)
/**
* 分析下运行顺序
*/
GlobalScope.launch {
println("1")
delay(1000L)
println("2")
}
println("3")
Thread.sleep(2000L)
println("4")
/**
* 输出结果是3,1,2,4
* 因为3所在的位置和创建协程是同一层次代码,它会往下跑,因为创建协程需要时间,因此3先输出
* 接着整个线程睡眠2s,2s过程中,上面GlobalScope.launch协程创建肯定完成了,就开始输出1,接着协程延迟1s,输出2
* 睡眠够了2s,接着输出4
*/
/**
* 方式2:runBlocking 启动协程
* 看下它顺序呢
* 这个在开发中也不用的
* 因为:阻塞
*/
runBlocking {
println("11")
delay(1000L)
println("22")
}
println("33")
Thread.sleep(2000L)
println("44")
/**
* 输出是11,22,33,44
* 因为使用 runBlocking 启动的协程会阻塞当前线程的执行
*/
/**
* 方式3:async 启动协程
* 不过它不能单独使用,它要在协程域中创建协程
*/
// 这是错的
// async{
//
// }
// 分析下它的运行结果
runBlocking {
println("111")
async {
println("333")
}
println("222")
}
// 输出是111,222,333 因为async是不阻塞的
// 这个输出结果呢
runBlocking {
println("1111")
val result = async {
println("3333")
"4444"
}
println(result.await())
println("2222")
}
// 输出是1111,3333,4444,2222
/**
* 方式4:lifecycleScope.launch{}
* 推荐使用:在Android开发中的Activity和fragment推荐用
*/
//这里直接用时报错的,因为没有Activity和Fragment作用域
// lifecycleScope.launch(Dispatchers.IO){
//
// }
}
整个kotlin教程的源码项目结构图:
有问题或者完整源码的可以看简介联系我,也可以私信我,我每天都看私信的