java并发的初步思考 —— Java线程实现
来源:互联网 发布:miuco淘宝模特 编辑:程序博客网 时间:2024/04/30 00:29
其实,剖析Java线程的内部实现,可以看到Java内部的很多方法都是native修饰的,如
public static native Thread currentThread();
public static native void yield();
public static native void sleep(long millis) throws InterruptedException;
这也就是说,Java线程的实现应该说是基于所处的操作系统的,Java线程的实现并非是“平台无关”。这种实现,很可能是出于高效性的考虑,毕竟,平台相关与高效性是相关的。这也是JDK提供不同平台版本的原因吧。
线程实现的方式是很多的,如内核线程的实现方式、使用用户线程实现、使用用户线程加轻量级进程混合实现。而,Java线程在Windows及Linux平台上的实现方式,现在看来,是内核线程的实现方式。这种方式实现的线程,是直接由操作系统内核支持的——由内核完成线程切换,内核通过操纵调度器(Thread Scheduler)实现线程调度,并将线程任务反映到各个处理器上。内核线程是内核的一个分身。程序一般不直接使用该内核线程,而是使用其高级接口,即轻量级进程(LWP),也即线程。这看起来可能很拗口。看图:
(说明:KLT即内核线程Kernel Thread,是“内核分身”。每一个KLT对应到进程P中的某一个轻量级进程LWP(也即线程),期间要经过用户态、内核态的切换,并在Thread Scheduler 下反应到处理器CPU上。)
这种线程实现的方式也有它的缺陷:在程序面上使用内核线程,必然在操作系统上多次来回切换用户态及内核态;另外,因为是一对一的线程模型,LWP的支持数是有限的。
后记:
关于这篇blog的观点,应该说,大部分都来自《深入理解Java虚拟机》这本书。
参考《深入理解Java虚拟机:JVM高级特性与最佳实践 —— 第五部分 高效并发 》
- java并发的初步思考 —— Java线程实现
- java并发的初步思考 —— 同步实现及比较
- Java并发编程——线程池初步
- Java并发编程实现—Concurrent—初步学习
- java并发编程--线程池初步
- java并发编程--线程池初步
- java 并发安全的思考
- Java并发---- Executor并发框架--线程池,ThreadToolExecutor初步理解
- Java并发---- Executor并发框架--线程池,ThreadToolExecutor初步理解
- JAVA Executor实现并发线程
- JAVA Executor实现并发线程
- JAVA线程的初步学习
- java并发编程(对于线程内共享变量安全的思考)
- 从Java内存模型的角度思考线程安全与并发
- Java并发学习之一——线程的创建
- Java并发学习之三——线程的中断
- Java并发编程—— 一个线程的内心独白
- Java并发编程——线程池的使用
- java程序中加入@SuppressWarnings("serial")是什么意思?
- 创建型模式_创建者
- Hadoop 实战之Streaming(十)
- 深入理解DB2索引(Index)
- Hadoop 实战之Streaming(十一)
- java并发的初步思考 —— Java线程实现
- 建立本地源(yum、apt、pacman)
- 一个抗日老兵的一生,八年抗战 九死一生,打过台儿庄战役,见过张自忠将军 解放后 龙搁浅滩,困顿坎坷一生;但依然不改其乐!
- Hadoop 实战之Streaming(十二)
- ADMU3007E: 异常 com.ibm.websphere.management.exception.NoServerDefinedExceptio
- 分手快乐,祝你快乐,你找不到比我更好的。
- Hadoop 实战之运行AveragingWithCombiner(二)
- cout的输出顺序与其中表达式的执行顺序,以及自增操作优先级
- EBS R12 SLA: Analyzing Subledger Accounting