美文网首页
Java线程就是操作系统的线程(gold_axe)

Java线程就是操作系统的线程(gold_axe)

作者: 胖达_4b7e | 来源:发表于2020-10-25 17:00 被阅读0次

    自己写一个

    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方法的该叫什么名字

    叫Java_com_shadow_app_EnjoyThread_start0

    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线程

    相关文章

      网友评论

          本文标题:Java线程就是操作系统的线程(gold_axe)

          本文链接:https://www.haomeiwen.com/subject/iwrnmktx.html