自己写一个
1. 调用native方法的java类:
package com.shadow.app;
public class EnjoyThread {
//装载库,保证JVM在启动的时候就会装载,故而一般是也给static
static {
System.loadLibrary( "EnjoyThreadNative" );
}
public static void main(String[] args) {
EnjoyThread enjoyThread =new EnjoyThread();
enjoyThread.start0();
}
private native void start0();
}
除了编译成对应class文件以外, 还要编译一个.h的头文件:
javac -h . EnjoyThred.java
打开它 看native方法的该叫什么名字
2. native方法所在的.c文件
开始写一个.c文件,
取名threadNew.c, 通过Java_com_shadow_app_EnjoyThread_start0
这个方法名调
#include <pthread.h>
#include <stdio.h>
//定义变量接受线程id
pthread_t pid;
//线程的主体方法相当于 java当中的run
void* thread_entity(void* arg) {
//子线程死循环
while(1){
//睡眠100毫秒
usleep(100);
//打印
printf("I am new Thread\n");
}
}
//这个方法名字需要参考.h当中的方法名字,打开.h文件,复制方法名过来
//参数固定
Java_com_shadow_app_EnjoyThread_start0(JNIEnv *env, jobject c1) {
//调用linux的系统的函数创建一个线程
pthread_create(&pid,NULL,thread_entity,NULL);
//主线程死循环
while(1){
//睡眠100毫秒
usleep(100);
//打印
printf("I am main\n");
}
}
pthread_create :linux操作系统的线程控制原语
参数:
&pid
就是返回的线程号
thread_entity
就是让linux 线程干的活(直接写函数名)
4.需要把 .c文件变编译成so文件, 加入环境变量
so文件的名字 必须是 lib+名字
java类里面指定了 要加载 EnjoyThreadNative
所以 threadNew.c 要编译成 libEnjoyThreadNative
把so文件所在目录加入环境变量 , 让jvm 能找到他
5. EnjoyThread.class 正常运行 就行了
能起一个linux线程
网友评论