虚拟机实现java线程_深入理解java虚拟机(23):java与多线程
线程有以下三种实现方式
1、使用内核线程方式实现,优点内核完成线程切换和操纵调度器进行调度,并且负责将线程任务映射到处理器上。程序一般不使用内核线程会使用一种轻量级进程,轻量级进程与内核线程一对一模型如下图。
由于内核线程支持,一个轻量级进程在系统调用中阻塞了,不会影响进程继续工作。但是轻量级进程基于内核线程实现,所以创建、析构、同步都需要进行系统调用,系统调用的代价太高需要在用户态和内核态切换来去。其次轻量级进程都需要一个内核线程的支持,因此轻量级进程需要消耗一定的内核资源,因此一个系统可以支持的轻量级进程是有限的。
2、用户线程实现
完全建立在用户空间的线程。用户线程的创建、消毁、同步、调度完全在用户态中完成,不需要在内核态完成。优点非常快速且低消耗,也可以支持规模更大的数量,缺点没有内核线程的支援创建、切换和调度都是需要考虑的问题。操作系统只把资源分配给了进程,阻塞如何处理、多处理器系统如何将线程映射到处理器上会异常困难,甚至不可能完成
3、用户级线程和轻量级线程混合实现
用户线程创建还是建立在用户空间,因此用户线程的创建、析构、切换等操作依然廉价,所以可以支持大规模并发。操作系统提供支持的轻量级进程则用作用户线程和内核间的桥梁。这样可以使用内核线程的调度和处理器映射功能,并且系统调用通过轻量进程实现,大大降低整个进程阻塞的风险。
java的线程实现方式
主要调度方式有两种协同式调度和抢占式调度。协同式调度自己控制切换,把自己事情干完再进行线程切换。如果一个线程有问题,一直不告诉系统线程切换,就会阻塞程序。抢占式调度,多个线程由系统来分配运行时间,线程本身不决定线程切换,Thread。yield可以让出执行时间。
状态切换
新建:创建后尚未启动的状态
运行:操作系统中的running和ready,就是这个线程可能是运行状态也可能是等待cpu分配运行时间
无限期等待:不会被cpu分配运行时间,要等到其他线程显示的唤醒。没有设置timeout的object.wait(),Thread.join(),LockSupport.park()
限期等待:不会被cpu分配运行时间,不需要其他线程显示的唤醒。有设置timeout的object.wait(),Thread.join(),LockSupport.parkNanos(),Thread.sleep(),LockSupport.parkUtil();
阻塞状态:阻塞和等待的区别是阻塞在等待一个排它锁,这个事件将在其他线程是否锁是产生。线程等待进入同步区域后会阻塞。
结束:已经终止的线程状态。
虚拟机实现java线程_深入理解java虚拟机(23):java与多线程相关推荐
- java虚拟机内存模型种类_深入理解volatile类型——从Java虚拟机内存模型角度
一.前言 在java多线程编程中,volatile可以用来定义轻量级的共享变量,它比synchronized的使用成本更低,因为它不会引起线程上下文的切换和调度.所谓知己知彼.百战不殆.本文从JVM内 ...
- 深入jvm虚拟机第4版_深入理解JVM虚拟机
自动内存管理机制 Java虚拟机原理 所谓虚拟机,就是一台虚拟的机器.他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为 系统虚拟机和程序虚拟机, 大名鼎鼎的Visual Box.Vmar ...
- java visualvm远程监控_深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutori ...
- 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析
Java虚拟机深入理解系列全部文章更新中... https://blog.ouyangsihai.cn/shen-ru-li-jie-java-xu-ni-ji-java-nei-cun-qu-yu- ...
- java虚拟机内存监控_深入理解JVM虚拟机9:JVM监控工具与诊断实践
本文转自: https://juejin.im/post/59e6c1f26fb9a0451c397a8c 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到 ...
- java jvm垃圾回收算法_深入理解JVM虚拟机2:JVM垃圾回收基本原理和算法
本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 喜欢的话麻烦点下Star哈 文章将同步到我的个人博客: www.how ...
- java虚拟机的生命周期_深入理解Java虚拟机——JVM的生命周期
package test; public class JVMTestLife { public static void main(String[] args) { new Thread(new Run ...
- java从内存角度理解类变量_深入理解volatile类型——从Java虚拟机内存模型角度...
一.前言 在java多线程编程中,volatile可以用来定义轻量级的共享变量,它比synchronized的使用成本更低,因为它不会引起线程上下文的切换和调度.所谓知己知彼.百战不殆.本文从JVM内 ...
- 对Java线程概念的理解
1.什么是线程 现代操作系统在运行一个程序时, 会为其创建一个进程. 例如, 启动一个Java程序, 操作系统就会创建一个Java进程. 现代操作系统调度的最小单元是线程, 也叫轻量级进程(Light ...
最新文章
- 2022-2028年中国TPE手套行业市场全景调查及发展策略分析报告
- CCTouchDispatcher sharedDispatcher 方法过期
- 前端见微知著工具篇:Bower组件管控
- 数值计算领域的“圣经”,图灵出了新版本 | 11月书讯
- nginx压力测试和并发预估
- javascript this 关键字学习
- 计算矢量面积_航天器轨道参数计算推导
- 线上防雪崩利器——熔断器设计原理与实现
- python学习实例(3)
- Linux如何避免每次开启 CentOS 时,都要手动开启 sshd 服务,防止连接不上Xshell
- 在.Net Core中使用Swagger制作接口文档
- php 纯数组,PHP 数组
- win10 android 手机驱动下载,win10手机刷机包驱动
- EPSON ME office 700FW打印机废墨收集垫已到使用寿命解决办法
- 重庆邮电大学801信号与系统考研最核心知识点
- nature 计算机论文,10分钟读懂6篇Nature/Science系列文章
- 解决360抢票王刷票0.1秒停顿问题,思考抢票软件和IT行业
- Japanese Student Championship 2021
- json几种不同解析方式
- 关于浮点运算和定点运算
热门文章
- java并发包下的lock接口与syschronized关键字的区别
- C# 值类型和引用类型
- 洛谷P1551 亲戚题解
- 学习总结 java 创建及其练习
- Android--Handler
- Unity3D中C#编写脚本
- 微软VC/MFC FAQ(转)
- [转载] python输入一个年份、输出是否为闰年_Python程序检查给定年份是否为闰年
- [转载] Python中numpy.clip();numpy.fabs()的用法;以及math.pow()的说明
- [转载] Python轻量Web框架Flask使用