《深入理解Java虚拟机》(三)--Java内存模型与线程(3)

2018-06-03  本文已影响40人  蓝色_fea0

Java与线程

并发并不一定要依赖多线程(比如PHP中很常见的多进程并发),但是Java里面谈论到并发,大多与线程脱不开关系。

1/1 线程的实现

主流操作系统都提供了线程实现,Java语言则提供了在不同硬件和操作系统平台下对线程操作的统一处理,每个已经执行start()且还未结束的java.lang.Thread类的实例就代表了一个线程,Thread类与大部分API有明显的差异,它的所有关键方法都是声明Native的,一个Native方法意味着这个方法是使用非Java语言来实现的。线程实现的主要方式有三种:使用内核线程实现,使用用户线程实现和使用用户线程加轻量级进程混合实现。

java线程的实现

在JDK1.2之后,线程模式为基于操作系统原生的线程模型来实现,线程模型只对并发规模和操作成本产生影响,对Java程序的编码和运行来说没有影响。Windows和Linux提供的线程模型为1对1,Solaris(Unix系列的操作系统)同时支持1对1和多对多,因此Solaris版的JDK中也对应提供了两个平台专有的虚拟机参数:-XX:+UseLWPSynchronization(默认值)和-XX:UseBoundThreads来明确指定虚拟机使用哪种线程模式。

1/2 Java线程调度

线程调度是指系统为线程分配处理器使用权的过程。主要调度方法有两种,分别是协同式线程调度,和抢占式线程调度。

1/3 状态转换

Java语言定义了5种线程状态,在任意一个时间点,一个线程只能有且只有一种状态。这5种状态如下:

上述5种状态在遇到特定事件的时候可以相互转换,它们的转换关系如下图所示。


线程状态转换关系
上一篇 下一篇

猜你喜欢

热点阅读