C手写一个多线程,供java调用
package com.tigger; public class MyThread { static {
//装载库,保证jvm在启动的时候就会装载 System.loadLibrary("TiggerThreadNative"); } public static void main(String[] args) { MyThread myThread=new MyThread(); myThread.start0(); } private native void start0(); }
1、编写java代码 MyThread.java 使用jni调用一个c程序,上传至/home/mythread/com/tigger/目录下
2、编译成class程序 javac MyThread.java
3、生成头文件 javah packageName.ClassName 此命令需要在包外执行,javac命令需要在包当中执行
1 | javah com.tigger.MyThread |
4、将编译好的头文件移动到MyThread.java同级目录下
5、开始编写c程序threadNew.c,并放到/home/mythread/com/tigger/ 目录下
#include <pthread.h> #include <stdio.h> #include "com_tigger_MyThread.h" //需导入刚刚编译的.h文件 pthread_t pid; void* thread_entity(void* arg) { while(1){ usleep(100); printf("I am new Thread\n"); } } //此方法名需要从刚刚编译的.h头文件里复制方法名,这里参数写死 JNIEXPORT void JNICALL Java_com_tigger_MyThread_start0 (JNIEnv * evn, jobject c1) { pthread_create(&pid,NULL,thread_entity,NULL); while(1){ usleep(100); printf("I am main\n"); } } int main(){ return 0; }
6、将threadNew.c编译成一个动态链接库,这样在java 代码里会被load到内存
1 | gcc -I /usr/java/jdk1.8.0_221/include -I /usr/java/jdk1.8.0_221/include/linux threadNew.c -fPIC -shared -o libTiggerThreadNative.so -pthread |
7、将编译好的.so文件移动到/home/mythread/目录下 ,并加入到path,这样jvm才能load到
1 | mv libTiggerThreadNative.so /home/mythread/ |
进入mythread目录执行命令
1 | export LD_LIBRARY_PATH=/home/mythread/ |
8、测试
1 | java com.tigger.MyThread |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix