kotlin是协程的一种实现
-
Dispatchers.IO
:适用于执行磁盘或网络 I/O 操作的调度器,例如文件读写、网络请求等。在 Android 中,Dispatchers.IO
会使用一个专门的线程池来处理这些操作,以防止阻塞主线程。 -
Dispatchers.Main
:适用于处理与 UI 相关的操作的调度器,例如更新 UI 界面、响应用户输入等。在 Android 中,Dispatchers.Main
通常会将协程切换到主线程执行,确保 UI 操作在主线程中进行。 -
Dispatchers.Unconfined
:不对协程的执行环境做任何限制,使用该调度器时,协程将在调用它的线程中执行,直到遇到挂起函数为止,之后会在恢复执行时继续在之前的线程中执行。 -
Dispatchers.Default
:适用于执行 CPU 密集型任务的调度器,例如算法计算、数据处理等。Dispatchers.Default
在 Android 中会使用一个共享的线程池来处理这些任务,以便在多个协程之间进行合理的调度。
package com.kotlincoroutine.coroutine
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
fun main() {
//IO线程 超大密集的计算 Default
/**
* IO
* Default
* Main
*
*/
CoroutineScope(Dispatchers.IO).launch {
test()
// withContext(Dispatchers.Main){
//
// }
}
println("主线程")
Thread.sleep(2000)
}
/**
* 协程代码块
*/
suspend fun test() {
println("协程开始")
delay(1000)
println("协程结束")
}
1.runBlocking
package com.kotlincoroutine.coroutine
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
fun main() {
println("hello")
//如果给的参数第一个为空,那么它会去找到这个协程外面调用它的这个线程 一般在写Test的时候才用一下 阻塞式协程
val i = runBlocking (Dispatchers.IO){
//如果制定了了调度器,它会被分配到另一个线程上面执行 ,但也可以阻塞当前线程
println(
Thread.currentThread().name
)
//这个协程会阻塞当前线程 同步执行
delay(2000)
1
}
println(
Thread.currentThread().name
)
println("world $i ")
}
package com.kotlincoroutine.coroutine
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
fun main() {
println("hello")
//如果给的参数第一个为空,那么它会去找到这个协程外面调用它调度器 一般在写Test的时候才用一下 阻塞式协程
//会等里面所有的协程执行完了,才会释放主线程
val i = runBlocking (Dispatchers.IO){
//如果制定了了调度器,它会被分配到另一个线程上面执行 ,但也可以阻塞当