NDK / JNI:识别当前线程

时间:2011-04-21 21:17:12

标签: android multithreading android-ndk

在JNI本机方法中,有没有办法知道当前线程的ID而不调用Java?线程本地存储也可以工作。

编辑:pthread.h存在于NDK包含文件夹中...有没有人知道Java线程是否与NDK实现中的POSIX相对应?

1 个答案:

答案 0 :(得分:5)

您对哪个ID感兴趣? Dalvik线程转储包括:

"main" prio=5 tid=1 TIMED_WAIT
  | group="main" sCount=1 dsCount=0 obj=0x40017730 self=0x12798
  | sysTid=3167 nice=0 sched=0/0 cgrp=default handle=-2146114456
  | schedstat=( 358850000 275073000 869 ) utm=23 stm=12 core=0

“tid”是VM的ID。 “handle”是pthread_t。 “sysTid”是gettid()(Linux进程ID)的结果。

未显示libcore线程ID(从java.lang.Thread.getId()获取)。

(你可以通过“adb shell kill -3”获得上面的内容。输出转到一个公共文件,由dalvik.vm.stack-trace-file属性定义 - 通常是/data/anr/traces.txt ,但它因设备而异。)

编辑:每个Dalvik VM线程都是Linux pthread。 gettid()系统调用将为每个线程提供一个唯一的ID。此外,您可以在java.lang.Thread或pthread_key中向TLS添加标识信息。