找到linux获得java线程ID的方法
来源:互联网 发布:科瑞达软件官网 编辑:程序博客网 时间:2024/05/24 23:16
网上大部分资料提供找到线程ID的方法多限于java程序内部线程对象的ID,而不是整个系统的线程ID,本来寄希望于 线程ID=进程ID+内部线程对象ID, 但实验结果表明这个公式不成立,后来师兄说在windows下内部线程对象ID与线程ID有一一对应的关系,在linux下这种关系不固定,那就再换一种方式吧。
终于找到一种在linux下可以获得java程序执行当前任务的线程ID,方法如下
1.编写系统调用C文件,实现gettid()方法
2.使用JNI用实现java对C的调用,即可在java中直接获得gettid()返回当前线程ID
具体步骤
1.GetTid.java
public class GetTid {
static
{
System.loadLibrary("gettid");
}
public native int gettid();//本地方法声明
public int getthreadId()
{
return gettid();
}
}
--------------------------------------------------------------------------
2.利用JNI编译此JAVA文件,生成GetTid.h(具体的方法可以参考我的另一篇博文——JNI调用)
3. gettid.c
#include <sys/syscall.h>
#include <sys/types.h>
#include <getopt.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <GetTid.h>
#define SYSCALL_NAME"gettid"
#ifndef _NR_gettid
#define _NR_gettid 224
#endif
JNIEXPORT int JNICALL Java_GetTid_gettid
(JNIEnv *env, jobject obj)
{
int sys_ret;
sys_ret=(pid_t)syscall(_NR_gettid);//使用系统调用获得tid,虽然在linux终端中man gettid() 函数有使用方法,但是具体的实现还是要由自己来完成
printf("%d ",sys_ret);
return sys_ret;
}
--------------------------------------------------------------------------
4.makefile
libgettid.so:gettid.o
gcc -Wall -rdynamic -shared -o libgettid.so gettid.o
gettid.o:gettid.c GetTid.h
gcc -Wall -c gettid.c -I./ -I/usr/include -I/home/tina/workspace/tenantmanager/src/aspect -I/home/tina/jdk1.6.0_25/include -I/home/tina/jdk1.6.0_25/include/linux
---------------------------------------------------------------------------
5.编译生成.so文件,
再将该文件拷到/usr/lib下,
然后更改系统环境变量文件/etc/profile
添加export LD_LIBRARY_PATH=/home/usr/lib
经过这些步骤可以在其他的java程序中调用gettid()函数。
建议:我在实现过程中出现很多错误,一部分是JNI方面的,另一部分是关于编译环境的,建议大家使用在linux环境下使用eclipse+CDT 编译C或JAVA,因为复杂的项目,文件之间有依赖性,单用javac 或GCC无法很好的处理依赖性,而eclipse在这一方面处理的很好,大家可以借用。
在此,多谢师兄们还有老公的帮助。
- 找到linux获得java线程ID的方法
- [Pthread] Linux上获得线程Id的方法
- 在linux上获得线程id的方法
- 在linux上获得线程id的方法
- 在linux上获得线程id的方法
- 获得线程的 ID
- Linux下获得线程ID
- 通过线程ID获得窗口句柄的方法
- linux 获取线程ID的方法
- linux 获取线程ID的方法
- Linux下获取线程ID的方法
- Linux获取线程id的方法学习
- linux下获得线程tid的方法
- Linux下获得线程ID syscall(224)
- linux获取线程Id的三种方法
- linux线程的线程ID与其进程ID
- linux线程的线程ID与其进程ID
- 如何获得刚才新增的Id---hibernate--java--j2ee--[完美方法]
- 双头raid 阵列
- SQL字符串处理函数大全
- apache 与weblogic 服务群集
- C++拷贝构造函数(深拷贝,浅拷贝)
- session_onend执行的充分条件
- 找到linux获得java线程ID的方法
- js倒计时。
- Mongodb 的ORM框架 Morphia 之 使用Morphia(映射对象)
- [读书笔记]虚拟IP
- Android禁止横屏竖屏切换
- linux apache 日志分析与状态
- 面向过程和面向对象思想转变
- C#中的out string
- Oracle 函数