Java线程和操作系统线程的关系

您所在的位置:网站首页 操作系统进程之间的关系 Java线程和操作系统线程的关系

Java线程和操作系统线程的关系

2024-05-24 18:23| 来源: 网络整理| 查看: 265

之前被问起 Java线程 和 操作系统线程 有什么关系. 一时不知道如何回答. 一直想弄明白,故从OpenJDK源码中找寻一下答案 , 如何编译源码和搭建环境,且看 Ubuntu18.04编译调试OpenJDK15

什么是进程, 什么是线程?[1]进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。摘自 https://my.oschina.net/u/3375733/blog/1517685green threads VS native threadsgreen threads 是一种由运行环境或虚拟机(VM)调度,而不是由本地底层操作系统调度的线程。绿色线程并不依赖底层的系统功能,模拟实现了多线程的运行,这种线程的管理调配发生在用户空间而不是内核空间,所以它们可以在没有原生线程支持的环境中工作。在Java 1.1中,绿色线程(至少在 Solaris 上)是JVM 中使用的唯一一种线程模型。 由于绿色线程和原生线程比起来在使用时有一些限制,随后的 Java 版本中放弃了绿色线程,转而使用native threads。[2]

在 Java1.2 之后. Linux中的JVM是基于pthread实现的,即 现在的Java中线程的本质,其实就是操作系统中的线程

从源码里解答

先写一个测试代码Test.java

public class Test { public static void main(String[] args) throws InterruptedException { System.out.println(" -- new thread--"); Thread thread = new Thread(() -> { System.out.println("hello thread"); }, "Thread Name "); System.out.println(" -- start -- "); thread.start(); thread.join(); System.out.println("end"); } }

然后修改launch.json 里 Java启动的 args为Test.java的路径 ( 从JDK11起可以简化启动单个源代码文件的方法, 即 java Test.java = javac Test.java + java Test )

Java的Thread.start()中调用的了一个native方法即 private native void start0();

我们在OpenJDK源码中找到这个方法. 即 src/java.base/share/native/libjava/Thread.c

{"start0", "()V", (void *)&JVM_StartThread},

跟进去JVM_StartThread 即来到了 src/hotspot/share/prims/jvm.cpp



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3