美文网首页
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)

    自己写一个 1. 调用native方法的java类: 除了编译成对应class文件以外, 还要编译一个.h的头文件...

  • 线程状态

    java线程与操作系统线程状态略有不同。 1. 操作系统底层线程状态: 课本经典五状态: 2. JAVA线程状态:...

  • JVM线程模型概览

    HotSpot中的线程模型是Java线程(java.lang.Thread)与本地操作系统线程一一映射,本地线程在...

  • 并发编程(三)synchronized实现原理

    Java线程切换的实质 Java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统的帮忙...

  • java线程状态

    java线程状态 知识导读 JVM 实现都把 Java 线程一一映射到操作系统底层的线程上,把调度委托给了操作系统...

  • Java源码-线程池

    一、线程池实现原理 Java支持多线程,多线程可以提高任务的执行效率。但是Java里面的线程跟操作系统的线程是一一...

  • Java的线程与操作系统原生线程之间的关系

    Java的多线程是基于操作系统的多线程实现的。主流的操作系统都提供了线程的支持,所以java语言提供了在不同硬件和...

  • Java 线程

    本文主要摘取自Java 线程简介 线程基础 什么是线程? 几乎每种操作系统都支持进程的概念 ―― 进程就是在某种程...

  • (五) volatile关键字

    Java多线程目录 1 背景 理解Java多线程的内存抽象逻辑请阅读java多线程内存模型,当代操作系统,处理器为...

  • java中的线程

    java语言里的线程本质上就是操作系统的线程,他们是一 一对应的 线程生命周期 线程状态转换图—— 五态模型 初始...

网友评论

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

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