class MainActivity :AppCompatActivity(){privatevar mainScope =MainScope()overridefunonCreate(savedInstanceState: Bundle?){super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)
Log.e(TAG,"onCreate start ${Thread.currentThread().name}")
mainScope.launch{val time = measureTimeMillis {val job1 = launch {
Log.e(TAG,"job1 start ${Thread.currentThread().name}")delay(1000)
Log.e(TAG,"job1 end ${Thread.currentThread().name}")}.join()val job2 = launch {
Log.e(TAG,"job2 start ${Thread.currentThread().name}")delay(1000)
Log.e(TAG,"job2 end ${Thread.currentThread().name}")}.join()val job3 = launch {
Log.e(TAG,"job3 start ${Thread.currentThread().name}")delay(1000)
Log.e(TAG,"job3 end ${Thread.currentThread().name}")}.join()}
Log.e(TAG,"time:$time")}
Log.e(TAG,"onCreate end ${Thread.currentThread().name}")}overridefunonDestroy(){super.onDestroy()
mainScope?.cancel()}}// log result2024-05-0614:06:58.06719543-19543 Yang E onCreate start main
2024-05-0614:06:58.07119543-19543 Yang E onCreate end main
2024-05-0614:06:58.21919543-19543 Yang E job1 start main
2024-05-0614:06:59.22019543-19543 Yang E job1 end main
2024-05-0614:06:59.22119543-19543 Yang E job2 start main
2024-05-0614:07:00.22219543-19543 Yang E job2 end main
2024-05-0614:07:00.22319543-19543 Yang E job3 start main
2024-05-0614:07:01.22419543-19543 Yang E job3 end main
2024-05-0614:07:01.22519543-19543 Yang E time:3080
② 并行执行多个协程构建器
class MainActivity :AppCompatActivity(){privatevar mainScope =MainScope()overridefunonCreate(savedInstanceState: Bundle?){super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)
Log.e(TAG,"onCreate start ${Thread.currentThread().name}")
mainScope.launch{val time = measureTimeMillis {val job1 = launch {
Log.e(TAG,"job1 start ${Thread.currentThread().name}")delay(1000)
Log.e(TAG,"job1 end ${Thread.currentThread().name}")}val job2 = launch {
Log.e(TAG,"job2 start ${Thread.currentThread().name}")delay(1000)
Log.e(TAG,"job2 end ${Thread.currentThread().name}")}val job3 = launch {
Log.e(TAG,"job3 start ${Thread.currentThread().name}")delay(1000)
Log.e(TAG,"job3 end ${Thread.currentThread().name}")}
job1.join()
job2.join()
job3.join()}
Log.e(TAG,"time:$time")}
Log.e(TAG,"onCreate end ${Thread.currentThread().name}")}overridefunonDestroy(){super.onDestroy()
mainScope?.cancel()}}// log result2024-05-0614:30:03.13231986-31986 Yang E onCreate start main
2024-05-0614:30:03.13631986-31986 Yang E onCreate end main
2024-05-0614:30:03.27131986-31986 Yang E job1 start main
2024-05-0614:30:03.27231986-31986 Yang E job2 start main
2024-05-0614:30:03.27331986-31986 Yang E job3 start main
2024-05-0614:30:04.27431986-31986 Yang E job1 end main
2024-05-0614:30:04.27431986-31986 Yang E job2 end main
2024-05-0614:30:04.27431986-31986 Yang E job3 end main
2024-05-0614:30:04.27531986-31986 Yang E time:1071
val job1 = launch {}.join()这一句启动协程后,launch{}花括号中的内容会包装为挂起函数,此时不会阻塞线程,让出线程使用权,但这个协程构建器之前无任何代码执行,线程会阻塞等到llaunch{}花括号中内容执行完成,每个协程构建器耗时1s,三个job执行耗时3s,为串行执行