Java基础教程:多线程(5)-----线程的调度之优先级
admin
2024-03-22 19:57:14
0

程序中的多线程是并发执行的,但这只是宏观现象。对于大多数计算机而言,CPU只有一个,在某个特定的时刻只能执行一条机器指令,多线程的每个线程只有得到CPU的使用权才能执行指令。Java虚拟机按照特定机制为多个线程分配CPU的使用权就是线程的调度。
 

在计算机中,CPU的调度有两种调度模型,分别是分时调度模型和抢占式调度模型。所谓分时调度模型是指让所有的线程轮流获得CPU的使用权,并且平均分配每个线程占用的CPU的时间片。而抢占式调度模型是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。Java虚拟机采用的就是抢占式调度模型,这种默认的方式在很多时候都是适用的,程序员不需要去关心它,但有时候需要改变这种分配的模式,这时则需要控制CPU的调度。JDK中提供了一系列的方法用于控制线程的调度。
 

线程的优先级

在线程中有优先级的机制,线程的优先级用1~10之间的整数来表示,数字越大则表示优先级越高。除了数字,还可以使用Thread类中提供的三个静态常量表示线程的优先级,他们分别是:MAX_PRIORITY、MIN_PRIORITY、NORM_PRIORIY。

优先级高的线程获得CPU执行的机会越大,而优先级低的线程获得CPU执行的机会越小。在默认情况下,每个线程都有自己的优先级,例如main线程具有普通优先级。线程优先级不是固定不变的,通过调用Thread类的setPriority(int newPriority)方法可以进行改变,setPriority()方法的数newPriority接收1~10之间的数或者Thread类的三个静态常量,代码如下所示:

class MaxPriority implements Runnable {

publicvoid run() {

for(int i = 0; i < 3; i++) {

System.out.println(Thread.currentThread().getName()

+":优先级为高,循环变量为" + i);

}

}

}

class MinPriority implements Runnable {

publicvoid run() {

for(int i = 0; i < 3; i++) {

System.out.println(Thread.currentThread().getName()

+":优先级为低,循环变量为" + i);

}

}

}

public class Example06 {

publicstatic void main(String[] args) {

ThreadminPriority = new Thread(new MinPriority());

ThreadmaxPriority = new Thread(new MaxPriority());

minPriority.setPriority(Thread.MIN_PRIORITY);

maxPriority.setPriority(10);

minPriority.start();

maxPriority.start();

}

}

运行结果为:

Thread-1:优先级为高,循环变量为0

Thread-1:优先级为高,循环变量为1

Thread-1:优先级为高,循环变量为2

Thread-0:优先级为低,循环变量为0

Thread-0:优先级为低,循环变量为1

Thread-0:优先级为低,循环变量为2

在程序中创建了两个线程minPriority和maxPriority,分别将线程的优先级设置为1和10,从运行结果可以看出优先级高的maxPriority线程先运行完毕后优先级低的minPriority线程才开始运行。

虽然Java中提供了10个线程优先级,但这些优先级需要操作系统的支持,然而,不同的操作系统支持的优先级并不相同,不能很好的和Java中线程优先级一一对应,因此,在设计多线程应用程序时,其功能的实现一定不能依赖于线程的优先级,而只能把线程优先级作为一种提高程序效率的手段。

相关内容

热门资讯

轻松 美味西餐的便捷菜谱指南 本便捷菜谱指南教你轻松 美味西餐,无论你是烹饪新手还是老手,都能在这本指南中找到适合你的西餐食谱,本...
项城商城美食盛宴,地道风味,味... 项城商城举办美食盛宴,汇聚当地特色美食,让食客尽享味蕾之旅,品尝地道风味,感受浓郁的文化氛围,是一次...
胡静都出演过哪些电视剧或者电影... 胡静都出演过哪些电视剧或者电影?《少年张三丰》、《齐天大圣孙悟空》《孝庄秘史》、《封神》、《人民的名...
农历六月酷暑难熬,提醒:常吃4... 农历六月酷暑难熬,提醒:常吃4道家常菜抗菌消炎!免疫力蹭蹭涨,不懂吃可惜了! 在我们的生活中,对于吃...
分享3道适合新手改善伙食的家常... 对于刚下厨的新手来说,最头疼的莫过于“做什么菜既简单又好吃”。今天就分享的3道适合新手的家常菜,做法...
女朋友说自己没有什么话题我该怎... 女朋友说自己没有什么话题我该怎么回答?如果女朋友说你自己跟她没什么话题,那你就应该回答他,那你就告诉...
我喜欢的女生对谁都非常热情,唯... 我喜欢的女生对谁都非常热情,唯独对我,冷淡的要死!这也不是坏事,兄弟这种情况并不能说明她就放弃你了,...
八字合婚 八字合婚乾造 丙寅 壬辰 壬辰 己酉 坤造 丁卯 丁未 甲子 丙寅 ~~~~~~~~~~~~~~~~...
阿衰漫画可以在网上看吗? 阿衰漫画可以在网上看吗?恩 可以 不过只有 六部 请原谅。。。。。。。。。应...
黄家驹葬后又挖出来火葬吗?是真... 黄家驹葬后又挖出来火葬吗?是真的吗?放你 妈 妈妈 妈妈妈妈妈妈的屁!!!!**黄家驹是死...
关于诚信的故事应该怎么写? 关于诚信的故事应该怎么写?  记得在我很小的时候,爸爸就一遍遍地告诉我:诚实是做人最基本的品格。对于...
我想我是得了臆想症 经常会因为... 我想我是得了臆想症 经常会因为自己的想像气的心里难过,无中生有,歇斯底里,请帮忙我该怎么办?这样下去...
遇你与你予你余你什么意思 遇你与你予你余你什么意思遇你表示的是遇见坦答你,与你意思是和你在一起,予你的意思是型信拿给你卜搭,余...
为什么越来越多的年轻男生不想谈... 为什么越来越多的年轻男生不想谈恋爱了?现在很多男生都觉得谈恋爱租含告谈不起啊,因为很多人谈恋爱都花老...
故乡的小河原唱 故乡的小河原唱马斌演唱的故乡的小河!原唱故乡的小河原唱是马斌
听说牛教授乳糖酶挺好,跟儿歌啥... 听说牛教授乳糖酶挺好,跟儿歌啥区别?牛教授乳糖酶含量高,口味好,它是调制乳品不是固体饮料,不错的。
道士写的符咒真的灵吗 道士写的符咒真的灵吗不灵,这是一些别有用心的假道士骗钱的手段。先说你或你的家人有“血光之灾”使你产生...
男朋友喜欢工装风格,我喜欢日常... 男朋友喜欢工装风格,我喜欢日常少女一点的,他希望我忘工装风格走,他说他喜欢,可是,我不喜欢啊我该怎么...
《卖火柴的小女孩》一文朗读时,... 《卖火柴的小女孩》一文朗读时,配什么音乐最好?要悲惨一点的曲子,不要流行歌曲,要歌名。冬天里的一把火...
我姓夏,老婆马上就要生了。请帮... 我姓夏,老婆马上就要生了。请帮我闺女起个好听的名字,谢谢。名字里请不要有艳、菲、雨、茹、勇、菊、清、...