Bootstrap

Java中的JVM是如何实现多线程的?

文章已同步至GitHub开源项目:

并发不一定都要用到线程,比如PHP中用到的是多进程。但是在Java中并发基本上都是使用线程来实现的。我们先来看看线程在Java虚拟机中是如何实现的。

线程的实现

主流的操作系统都提供了线程的实现,Java线程则提供了在不同硬件和操作系统下对线程的统一处理。每个已经start且并未结束的Thread类的实例对象都是一个线程。

我们查看Thread的JDK源码,发现所有的方法都被修饰。也就是说,Thread是使用平台相关的手段来实现的。在不同的操作系统或者硬件平台都有不同的实现。因此,标题为,而不是

实现线程主要有三种方式

  • 内核线程 (1:1线程模型)

  • 用户线程 (1:N 线程模型)

  • 用户线程 + 轻量级进程 混合 (N:M 线程模型)

Java线程的实现

Java规范中并没有具体要求使用哪种方式来实现

在JDK1.2之前,使用一种的用户线程来实现的。

JDK1.3之后,普遍采用内核线程来实现,也就是1:1的线程模型。

以市场占有率最大的HotSpot虚拟机来举例,它的每一个线程都是直接映射到操作系统的原生线程来实现的。中间没有额外的结构,所有的线程调度都是由操作系统完成的,虚拟机全权交给操作系统处理。

操作系统支持什么样的线程模型,很大程度上会影响在此系统上的虚拟机的选择。所以在JVM规范中,不会限定使用哪种线程模型。由于Thread类对底层的规范统一,对于上层的Java应用来说,底层的差异都是透明的。只要面向Thread类进行编程就好了。

这也间接的符合了设计原则中的。

文章已同步至GitHub开源项目: 更多Java相关知识,欢迎访问!