Java与线程

2018-03-15  本文已影响0人  jqdywolf

1. 线程的实现

三种方式

1. 使用内核线程实现

内核线程的定义:内核线程(Kernel-Level Thread简称KLT)是由操作系统内核支持的线程。线程的创建、销毁、调度都有内核完成。
一般程序是不会直接使用内核线程的,而是使用一种叫做轻量级进程(Light Weight Process简称LWT),这种东西就是我们上面通俗说的线程的概念。

每一个轻量级进程都由一个内核线程支持,它们是一一对应的关系。即线程创建、销毁、调度都是由内核线程完成的。


image.png
2. 使用用户线程实现

用户线程的意思是指线程的所有资源都由程序库实现,系统内核不感知用户线程的存在。

3. 使用内核线程和用户线程的混合实现

即同时存在内核线程和用户线程,在这种混合实现中,用户线程的创建、销毁等操作都还是在用户态完成,效率很高。而内核线程的调度等操作依旧由系统内核来完成。只需要维护一个关系:用户线程--内核线程的映射关系即可。

一般这种映射关系维持在多对多的情况下:


image.png

许多Unix系统比如Solaris/HP-UX都提供了这种线程模型

4. Java线程的选择

不同的操作系统支持不同的线程模型。
在Windows和Linux下,Java使用的是一对一的内核线程实现。

2. 线程的调度

调度一般分为两种:协调式调度和抢占式调度。

协调式

每个线程都会在执行完自己的所有指令后才会让出CPU。

抢占式

2. 线程的状态

Java线程的状态有五种,即任一一个线程在一个时刻只会存在下面状态的一种。


image.png
上一篇 下一篇

猜你喜欢

热点阅读