最后,我发现JNI方法是解决我的问题的最好方法。作为参考,我发布了代码并为其构建说明(基于Wikipedia上的示例):
负责与C代码接口的Java类(getThreadId.Java
):
public class GetThreadID {
public static native int get_tid();
static {
System.loadLibrary("GetThreadID");
}
}
负责获取线程ID的C文件(getThread.C
):
#include <jni.h>
#include <syscall.h>
#include "GetThreadID.h"
JNIEXPORT jint JNICALL
Java_GetThreadID_get_1tid(JNIEnv *env, jobject obj) {
jint tid = syscall(__NR_gettid);
return tid;
}
class Main {
public static void main(String[] args) {
int tid = GetThreadID.get_tid();
System.out.println("TID=" + tid);
}
}
JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:bin/javac::")
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
javac GetThreadID.java
javah GetThreadID
gcc -I${JAVA_HOME}/include -fPIC -shared GetThreadID.c -o libGetThreadID.so
javac Main.java
java Main
问题内容: 我有一个Java应用程序,其中创建了一些线程(通过)。通过使用,我可以看到它们具有不同的线程ID(LWP列),我想从Java应用程序中获取这些ID。 在我发现的与此主题相关的大多数文章中,解决方案是使用。 但是,使用该方法可以为我提供主线程的PID(即使我从其中一个线程调用它),因此它并不能真正解决我的问题。 有什么方法可以获取应用程序创建的每个线程的线程ID ? 是否可以使用JNI完
问题内容: 在Linux C程序中,如何打印pthread库创建的线程的线程ID? 例如:我们可以通过 问题答案: 函数将给出当前线程的线程ID。 该函数返回调用线程的Pthread句柄。pthread_self()函数不会返回调用线程的整数线程。您必须使用返回该线程的整数标识符。 注意: 比这些调用快得多,但是提供了相同的行为。
问题内容: 如何查看Java进程中的线程数? 问题答案: 调试Java程序的有用工具,它提供了线程数和其他有关线程的信息:
问题内容: 在最繁忙的生产安装中,有时会遇到一个似乎陷入无限循环的单线程。经过大量研究和调试,我仍未弄清楚是谁的罪魁祸首,但似乎应该有可能。这是血腥的细节: 当前调试说明: 1) ps -eL 18975 向我展示了Linux pid的问题子线程19269 2) jstack -l 18975 说没有死锁, jstack -m 18975 不起作用 3) jstack -l 18975 确实给了我
本文向大家介绍在C#中如何从线程中获取线程ID,包括了在C#中如何从线程中获取线程ID的使用技巧和注意事项,需要的朋友参考一下 线程被定义为程序的执行路径。每个线程定义唯一的控制流。如果您的应用程序涉及复杂且耗时的操作,那么设置不同的执行路径或线程(每个线程执行一个特定的工作)通常会很有帮助。 线程是轻量级进程。使用线程的一个常见示例是现代操作系统对并发编程的实现。使用线程可以节省CPU周期,并提
问题内容: 我有一个固定的线程池,我可以将任务提交给该线程池(限制为 5个 线程)。如何找出这 5个 线程中的哪一个执行我的任务(例如“第3 个 线程中的第3 个 线程正在执行此任务”)? 问题答案: 使用: