13.《深入理解Java虚拟机》Java与线程
来源:互联网 发布:历史发展的必然性 知乎 编辑:程序博客网 时间:2024/05/29 19:52
Java与线程
在Java里面的并发大多与多线程脱离不了关系;
线程的实现
我们知道,线程是比进程更加轻量级的调度执行单位。各个线程可以共享进程资源,又可以独立调度。
在Java的Thread类中,我们观察源码可以发现,它的所有关键方法都声明成了Native方法,这表示这个方法的实现一般都是与平台相关的。
在实现线程主要有三种方法:
1. 使用内核线程实现;
2. 使用用户线程实现;
3. 使用用户线程加轻量级进程混合实现;
1. 内核线程实现:
内核线程就是直接由操作系统的内核支持的线程,这种线程由内核来完成线程切换,内核通过操纵调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。
程序一般不会直接使用内核线程,而是去使用内核线程的一种高级接口–轻量级进程,这种轻量级进程与内核线程之间1:1的关系称为一对一的线程模型。当然这种轻量级进程有局限性:
1. 基于内核线程实现的,所以各种线程操作,如:创建、析构及同步都需要进行系统调用,系统调用代价高,需要在用户态和内核态来回切换。
2. 每个轻量级进程都需要内核线程的支持,因此会消耗一定的内核资源(如内核线程的栈空间)。
2. 使用用户线程实现
用户线程的建立、同步、销毁和调度完全在用户态中完成,不需要内核的帮助。这种进程与用户线程之间1:N的关系称为一对多的线程模型。
用户线程的优势在于不需要系统内核支援,劣势也在于没有内核支援,所有的操作都需要用户处理。所以现在用户线程的使用越来越少。
3.使用用户线程加轻量级进程混合实现
操作系统提供支持的轻量级进程作为用户线程和内核线程之间的桥梁,这样可以使用内核提供的线程调度功能一家处理器映射,并且用户线程的系统调用要通过轻量级进程来完成,大大降低了整个进程被完全阻塞的风险。这种用户线程与轻量级进程的数量比是不确定的,即为N:M的关系。
4. Java线程的实现
对于SUN的JDK来说,都是使用一对一的线程模型实现的,一条Java线程就映射到一条轻量级进程中。
。
- 13.《深入理解Java虚拟机》Java与线程
- 深入理解java虚拟机之java内存模型与线程,主要参考《深入理解java虚拟机》
- 深入理解Java虚拟机--java内存模型与线程
- 《深入理解java虚拟机》-java内存模型与线程
- 深入理解 Java 虚拟机--Java 内存模型与线程
- Java与线程(深入理解Java虚拟机学习笔记)
- 深入理解java虚拟机—java内存模型与线程
- 深入理解java虚拟机--线程安全与优化
- 深入理解 Java 虚拟机--线程安全与锁优化
- 深入理解java虚拟机学习笔记-5.内存与线程
- [深入理解Java虚拟机]第十二章 Java内存模型与线程-Java与线程
- [深入理解Java虚拟机]第十二章 Java内存模型与线程-Java内存模型
- [深入理解Java虚拟机]第十二章 Java内存模型与线程-硬件的效率与一致性
- [深入理解Java虚拟机]第十三章 线程安全与锁优化-线程安全
- 深入理解java虚拟机
- Java虚拟机 深入理解
- 深入理解Java虚拟机
- 深入理解java虚拟机
- 编译原理学习笔记一
- Java的高低字节序转化
- sQL存储过程的优缺点
- 1000的阶乘
- xp下枚举KTIMER计时器(包含DPC计时器)
- 13.《深入理解Java虚拟机》Java与线程
- caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-上篇--caffe学习(6)
- 测试了一下php5.6的opcache的性能提升
- extjs中apply和applyIf的用法
- 进程与线程的区别
- 手把手教你高德基础地图+定位+设置Marker实现
- 显示传入第二个参数
- 工具类库系列(三)-IniReader
- 数据加载的妙招解析