《你必须知道的261个java语言问题》读书报告——第二弹
1.java中的线程调度
1.1 分时调度与时间调度
计算机通常只有一个CPU,在任意时刻只能一条机器指令,每个线程只有获得CPU的使用权才能执行命令.所谓的多线程的并发运行,其实是指从宏观上看.各个线程轮流或者CPU的使用权,分别执行各自的任务.在可运行池中,会有多个处于就绪状态的线程在等待CPU,JAVA虚拟机的一项任务就是负责线程的调度。线程的调度是指按照特定的机制为多个线程分配CPU使用权。
有两种调度模型:分时调度模型和抢占式调度模型。分时调度模型是指让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片这个也比较好理解。 java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。一个线程会因为以下原因而放弃CPU:
(1) java虚拟机让当前线程暂时放弃CPU,转到就绪状态,使其它线程或者运行机会。
(2) 当前线程因为某些原因而进入阻塞状态
(3) 线程结束运行
PS:需要注意的是,线程的调度不是跨平台的,它 不仅仅取决于java虚拟机,还依赖于操作系统。在某些操作系统中,只要运行中的线程没有遇到阻塞,就不会放弃CPU;在某些操作系统中,即使线程没有遇到阻塞,也会运行一段时间后放弃CPU,给其它线程运行的机会。
1.2 java中的的调度方法
java的线程调度是不分时的,同时启动多个线程后,不能保证各个线程轮流获得均等的CPU时间片。
如果希望明确地让一个线程给另外一个线程运行的机会,可以采取以下办法之一。
调整各个线程的优先级
让处于运行状态的线程调用Thread.sleep()方法
让处于运行状态的线程调用Thread.yield()方法
让处于运行状态的线程调用另一个线程的join()方法
转载于:https://www.cnblogs.com/mengyan/archive/2012/10/05/2712129.html
《你必须知道的261个java语言问题》读书报告——第二弹相关推荐
- c语言中变量可以用x1表示没,你必须知道的495个C语言问题 读书笔记
1.数值类型的选择:溢出特征重要而负值不重要,操作二进制位时避免符号扩展的问题,应该使用unsigned(无符号值) char 8位 -127~127 最大值255 short int 和 int 均 ...
- 你必须知道的495个C语言问题电子书pdf下载
你必须知道的495个C语言问题下载链接: https://pan.baidu.com/s/1UlMaEhv2cqzlWgd_8XQ3rg 提取码获取方式:关注下面微信公众号,回复关键字: 1131
- 《你必须知道的495个C语言问题》知识笔记及补充
1. extern在函数声明中是什么意思? 它可以用作一种格式上的提示表明函数的定义可能在另一个源文件中,但在 extern int f(); 和 int f(); 之间并没有实质的区别. 补充:ex ...
- 《你必须知道的.NET》第五章读书笔记
了解.NET的类型很重要 .NET的主要类型分为值类型和引用类型 区分这2种类型 1.内存方面 值类型: 包括枚举enum 和结构 struct 内存分配: 实例通常分配在线程的堆栈上,并且不包括任何 ...
- python语言必背代码-Python新手必须知道的25条知识点
原标题:Python新手必须知道的25条知识点 1.到底什么是Python?你可以在回答中与其他技术进行对比 下面是一些关键点: Python是一种解释型语言.这就是说,与C语言和C的衍生语言不同,P ...
- c 多文件全局变量_必须知道的C语言知识细节:C程序编译后内存到底是如何布局...
「今天是学习C语言第 116 天」 当你选择了一种语言,意味着你还选择了一组技术.一个社区.--Joshua Bloch C语言程序编译以后,代码和数据都必须存放在内存中由CPU执行.理解C程序内存是 ...
- 程序员必须知道的HTML常用代码有哪些?
HTML即超文本标记语言,是目前应用最为广泛的语言之一,是组成一个网页的主要语言.在现今这个HTML5华丽丽地占领了整个互联网的时候,如果想要通过网页抓住浏览者的眼球光靠因循守旧是不行的,程序猿们需要 ...
- [你必须知道的.NET]第二十回:学习方法论
本文,源自我回答刚毕业朋友关于.NET学习疑惑的回复邮件. 本文,其实早计划在<你必须知道的.NET>写作之初的后记部分,但是因为个中原因未能如愿,算是补上本书的遗憾之一. 本文,作为[& ...
- 一本你必须知道的.net
<你必须知道的.NET> 作者简介:王涛 微软C# MVP,高级软件工程师,机械工程硕士,主要研究方向为.NET底层架构和企业级系统应 用.现就职于某软件公司负责架构设计.软件开发和项目管 ...
最新文章
- 5 分钟入门 Google 最强NLP模型:BERT
- ngrok-外网访问内网工具NGROK的使用
- 网易云信助力中国航空工业集团,打造数字化云办公平台
- 破冰接入云信,打造陌生人游戏社交APP
- Everything(速度快的文件搜索软件) 1.4.1.801b 汉化绿色版
- Spring注解编程基石(二)
- 素数-试除法和埃式筛选法模板
- oss图片尺寸调用方式_CDN百科11 | 如何用CDN加速OSS源站资源
- 三维点云学习(3)8- 实现Spectral谱聚类
- 《区块链技术指南》摘要
- 什么是SEO?SEO的区别在哪里?
- 卖出平仓是什么意思​?
- 微软新的邮件帐户域名 @live.com和@windowslive.com
- Linux下wps文档结构图,wps文字的文档结构图
- vue-cli的webpack模板项目配置文件分析[转]
- ADC0809转换器
- 软考知识点---12软件工程基础
- Word中灵活的首字下沉
- 3.1 Go语言中的函数与方法
- 好分数阅卷3.0_好分数教师版下载-好分数教师版app下载(暂未上线)_预约_飞翔下载...
热门文章
- Oracle dblink报错:ORA-01017、ORA-02063解决
- Burst trie(爆炸式字典树)解读
- json传输二进制的方案(python版)
- linux读conf文件格式,CONF 文件扩展名: 它是什么以及如何打开它?
- 限定概率抽奖_圣诞节LOL紫色宝箱30连抽,限定全是冰雪,节日气氛很浓
- html使两个按钮重叠,div按钮重叠HTML
- 正式发布python版本的年份_飞书首次举办产品发布会,新版本“”正式发布
- 如何用文本档编辑c语言,c语言读写word文档
- android 复制文件到指定文件夹_按指定名称批量新建文件夹,其实并不难
- centos 安装java_在CentOS8上编译安装开源EDA工具——Surelog