返回

协程打印程序名及其所在线程

Android

协程,顾名思义,即协同的例程,以互相协作的方式来共享任务,实现并发编程。

一、打印协程名和相应的线程

打印日志如下:

[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端口开启调试功能。