最后,我发现JNI是解决我问题的最佳方法.作为参考,我发布代码并为其构建说明(基于维基百科的example):

负责与C代码(GetThreadID.java)接口的Java类:

public class GetThreadID {
public static native int get_tid();
static {
System.loadLibrary("GetThreadID");
}
}

C文件负责获取线程ID(GetThread.c):

#include 
#include 
#include "GetThreadID.h"
JNIEXPORT jint JNICALL
Java_GetThreadID_get_1tid(JNIEnv *env, jobject obj) {
jint tid = syscall(__NR_gettid);
return tid;
}

如何使用GetThreadID类的示例:

class Main {
public static void main(String[] args) {
int tid = GetThreadID.get_tid();
System.out.println("TID=" + tid);
}
}

最后,构建指令(javah自动生成GetThreadID.h):

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