返回
协程打印程序名及其所在线程
Android
2023-12-02 20:53:40
协程,顾名思义,即协同的例程,以互相协作的方式来共享任务,实现并发编程。
一、打印协程名和相应的线程
打印日志如下:
[main @reactor-tcp-nio-4] INFO a.a.c.CoroutinesDemo - Coroutine [coroutine#1] is running in thread [main @reactor-tcp-nio-4]
[main @reactor-tcp-nio-4] INFO a.a.c.CoroutinesDemo - Coroutine [coroutine#2] is running in thread [main @reactor-tcp-nio-4]
[main @reactor-tcp-nio-4] INFO a.a.c.CoroutinesDemo - Coroutine [coroutine#3] is running in thread [main @reactor-tcp-nio-4]
1.1、AS中java程序处理:
a. 打开协程Debug开关:
点击Edit Configurations。
b. 选择Run/Debug Configurations
c. 在弹出的页面选择Arguments标签,VM options输入:
-Dkotlinx.coroutines.debug=on
d. 运行java程序。
1.2、命令行中java程序处理:
打开命令行输入如下命令:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dkotlinx.coroutines.debug=on MainKt
执行成功后,会在5005端口开启调试功能。
二、自定义命名协程
打印日志如下:
[main @reactor-tcp-nio-4] INFO a.a.c.CoroutinesDemo - Coroutine [CustomCoroutine#1] is running in thread [main @reactor-tcp-nio-4]
[main @reactor-tcp-nio-4] INFO a.a.c.CoroutinesDemo - Coroutine [CustomCoroutine#2] is running in thread [main @reactor-tcp-nio-4]
[main @reactor-tcp-nio-4] INFO a.a.c.CoroutinesDemo - Coroutine [CustomCoroutine#3] is running in thread [main @reactor-tcp-nio-4]
2.1、AS中java程序处理:
a. 打开协程Debug开关:
同步骤一。
b. 在java文件中创建协程体
fun main() = runBlocking<Unit> {
val dispatcher = newFixedThreadPoolContext(3, "Coroutine")
val scope = CoroutineScope(dispatcher)
repeat(3) { i ->
//注意:这里传入了一个协程名称
scope.launch(CoroutineName("CustomCoroutine#$i")) {
println("Coroutine [${coroutineContext[CoroutineName.Key]} is running in thread [${Thread.currentThread().name}]")
}
}
}
2.2、命令行中java程序处理:
a. 打开协程Debug开关:
同步骤一。
b. 在java文件中创建协程体
fun main() = runBlocking<Unit> {
val dispatcher = newFixedThreadPoolContext(3, "Coroutine")
val scope = CoroutineScope(dispatcher)
repeat(3) { i ->
//注意:这里传入了一个协程名称
scope.launch(CoroutineName("CustomCoroutine#$i")) {
println("Coroutine [${coroutineContext[CoroutineName.Key]} is running in thread [${Thread.currentThread().name}]")
}
}
}
c. 打开命令行输入如下命令:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dkotlinx.coroutines.debug=on MainKt
执行成功后,会在5005端口开启调试功能。