JVM之线程实现
来源:互联网 发布:s7200plc编程软件下载 编辑:程序博客网 时间:2024/06/05 14:37
- 线程
- 1 实现线程的方式
- 11 使用内核线程实现
- 12 使用用户线程实现
- 13 用户线程加轻量级进程混合实现
- 2 Java的线程实现
- 1 实现线程的方式
并发不一定要依赖多线程,PHP中有多进程并发。但是,Java里面的并发是多线程的。
1. 线程
参考:Java多线程之基本概念
线程是比进程更轻量级的调度执行单位。线程可以把一个进程的资源分配和执行调度分开。一个进程里可以启动多条线程,各个线程可共享该进程的资源(内存地址,文件IO等),又可以独立调度。线程是CPU调度的基本单位。
1.1 实现线程的方式
主流OS都提供线程实现。Java语言提供对线程操作的同一API,每个已经执行start(),且还未结束的java.lang.Thread类的实例,代表了一个线程。
Thread类的关键方法,都声明为Native。这意味着这个方法无法或没有使用平台无关的手段来实现,也可能是为了执行效率。
1.1.1 使用内核线程实现
内核线程(Kernel-Level Thread, KLT)就是直接由操作系统内核支持的线程。
- 内核来完成线程切换
- 内核通过调度器Scheduler调度线程,并将线程的任务映射到各个CPU上
- 程序使用内核线程的高级接口,轻量级进程(Light Weight Process,LWP)–>(!!!名字是进程,实际是线程)
- 用户态和内核态切换消耗内核资源
1.1.2 使用用户线程实现
- 系统内核不能感知线程存在的实现
- 用户线程的建立、同步、销毁和调度完全在用户态中完成
- 所有线程操作需要用户程序自己处理,复杂度高
1.1.3 用户线程加轻量级进程混合实现
- 轻量级进程作为用户线程和内核线程之间的桥梁
1.2 Java的线程实现
操作系统支持怎样的线程模型,在很大程度上就决定了Java虚拟机的线程是怎样映射的。
上述的3种线程模型,只对线程的并发规模和操作成本有影响,对Java程序的编码和运行过程来说,这些差异是透明的。
线程调度是系统为线程分配处理器使用权的过程
线程调度
- 协同式线程调度 (Cooperative Threads-Scheduling)
- 实现简单,没有线程同步的问题。但是线程执行时间不可控,容易系统崩溃。
- 抢占式线程调度 (Preemptive Threads-Scheduling)
- 每个线程由系统来分配执行时间,不会有线程导致整个进程阻塞的问题。
虽然Java线程调度是系统自动完成的,但是我们可以建议系统给某些线程多分配点时间——设置线程优先级
线程的setPrority()方法
Java语言有10个级别的线程优先级,优先级越高的线程,越容易被系统选择执行。
但是并不能完全依靠线程优先级。因为Java的线程是被映射到系统的原生线程上,所以线程调度最终还是由操作系统说了算。
如Windows中只有7种优先级,所以Java不得不出现几个优先
级相同的情况。同时优先级可能会被系统自行改变。Windows系统中存在一个“优先级推进器”,当系统发现一个线程执行特别勤奋,可能会越过线程优先级为它分配执行时间。
- JVM之线程实现
- JVM之线程安全、原子性实现
- 运维-JVM监控之线程问题
- JVM之线程安全与锁优化
- OS 线程模型 及JVM线程模型的实现
- 深入理解JVM-Java线程-实现方式,线程调度,状态
- jvm线程
- jvm 线程
- 操作系统之线程实现
- JVM之 - 深入分析synchronized的JVM实现
- JVM源码分析之synchronized实现
- JVM源码分析之synchronized实现
- Java调优之jvm和线程的内存分析
- Java调优之jvm和线程的内存分析
- Java调优之jvm和线程的内存分析
- Java调优之jvm和线程的内存分析
- JVM源码分析之线程局部缓存TLAB
- JVM读书笔记之Java内存模型与线程
- 计算机控制技术课程配套教材习题解答(第4、5章)
- 使用函数指针和map加载不确定配置文件的实现
- JavaScript基础
- SVM的两个参数 C 和 gamma
- pb三层架构
- JVM之线程实现
- 对系统的优化(缓存和静态化)
- Principles of Research
- LIBSVM中的核函数及其参数
- 【那些年遇到过的面试题】select poll epoll
- Java利用QRCode.jar包实现二维码编码与解码
- 3D平面反射矩阵
- JVM之线程安全、原子性实现
- 测试人员如何报一个bug,性能测试,负载测试,压力测试