java中一个线程最小优先数_Java线程的优先级

Java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行(不完全正确,请参考下面的“线程优先级的问题“)。

记住当线程的优先级没有指定时,所有线程都携带普通优先级。

优先级可以用从1到10的范围指定。10表示最高优先级,1表示最低优先级,5是普通优先级。

记住优先级最高的线程在执行时被给予优先。但是不能保证线程在启动时就进入运行状态。

与在线程池中等待运行机会的线程相比,当前正在运行的线程可能总是拥有更高的优先级。

由调度程序决定哪一个线程被执行。

t.setPriority()用来设定线程的优先级。

记住在线程开始方法被调用之前,线程的优先级应该被设定。

你可以使用常量,如MIN_PRIORITY,MAX_PRIORITY,NORM_PRIORITY来设定优先级

优先级的取值

Java线程的优先级是一个整数,其取值范围是1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。

Thread源代码里对NORM_PRIORITY (数值为5) 的注释是“线程默认的优先级”public static final int MIN_PRIORITY = 1;

public static final int NORM_PRIORITY = 5;

public static final int MAX_PRIORITY = 10;

其实不然。默认的优先级是父线程的优先级。在init方法里,Thread parent = currentThread();

this.priority = parent.getPriority();

或许这么解释是因为Java程序的主线程(main方法)的优先级默认是为NORM_PRIORITY,这样不主动设定优先级的,后续创建的线程的优先级也都是NORM_PRIORITY了。public static void main(String[] args) {

System.out.println(Thread.currentThread().getPriority());

}

其执行结果是5。

设置优先级

可以通过setPriority方法(final的,不能被子类重载)更改优先级。优先级不能超出1-10的取值范围,否则抛出IllegalArgumentException。另外如果该线程已经属于一个线程组(ThreadGroup),该线程的优先级不能超过该线程组的优先级:public final void setPriority(int i) {

checkAccess();

if(i > 10 || i < 1)

throw new IllegalArgumentException();

ThreadGroup threadgroup;

if((threadgroup = getThreadGroup()) != null) {

if(i > threadgroup.getMaxPriority())

i = threadgroup.getMaxPriority();

setPriority0(priority = i);

}

}

其中setPriority0是一个本地方法。private native void setPriority0(int i);

线程组的最大优先级

我们可以设定线程组的最大优先级,当创建属于该线程组的线程时该线程的优先级不能超过这个数。

线程组最大优先级的设定:系统线程组的最大优先级默认为Thread.MAX_PRIORITY

创建线程组的时候其最大优先级默认为父线程组(如果未指定父线程组,则其父线程组默认为当前线程所属线程组)的最大优先级

可以通过setMaxPriority更改最大优先级,但无法超过父线程组的最大优先级

setMaxPriority的问题:该方法只能更改本线程组及其子线程组(递归)的最大优先级。

但不能影响已经创建的直接或间接属于该线程组的线程的优先级,也就是说,即使目前有一个子线程的优先级比新设定的线程组优先级大,也不会更改该子线程的优先级。只有当试图改变子线程的优先级或者创建新的子线程的时候,线程组的最大优先级才起作用。

线程优先级的问题

对于线程优先级,我们需要注意:

* Thread.setPriority()可能根本不做任何事情,这跟你的操作系统和虚拟机版本有关

* 线程优先级对于不同的线程调度器可能有不同的含义,可能并不是你直观的推测。特别地,优先级并不一定是指CPU的分享。在UNIX系统,优先级或多或少可以认为是CPU的分配,但Windows不是这样

* 线程的优先级通常是全局的和局部的优先级设定的组合。Java的setPriority()方法只应用于局部的优先级。换句话说,你不能在整个可能的范围 内设定优先级。(这通常是一种保护的方式,你大概不希望鼠标指针的线程或者处理音频数据的线程被其它随机的用户线程所抢占)

* 不同的系统有不同的线程优先级的取值范围,但是Java定义了10个级别(1-10)。这样就有可能出现几个线程在一个操作系统里有不同的优先级,在另外一个操作系统里却有相同的优先级(并因此可能有意想不到的行为)

* 操作系统可能(并通常这么做)根据线程的优先级给线程添加一些专有的行为(例如”only give a quantum boost if the priority is below X“)。这里再重复一次,优先级的定义有部分在不同系统间有差别。

* 大多数操作系统的线程调度器实际上执行的是在战略的角度上对线程的优先级做临时操作(例如当一个线程接收到它所等待的一个事件或者I/O),通常操作系统知道最多,试图手工控制优先级可能只会干扰这个系统。

* 你的应用程序通常不知道有哪些其它进程运行的线程,所以对于整个系统来说,变更一个线程的优先级所带来的影响是难于预测的。例如你可能发现,你有一个预期 为偶尔在后台运行的低优先级的线程几乎没有运行,原因是一个病毒监控程序在一个稍微高一点的优先级(但仍然低于普通的优先级)上运行,并且无法预计你程序 的性能,它会根据你的客户使用的防病毒程序不同而不同。

实际编码注意事项不要假定高优先级的线程一定先于低优先级的线程执行,不要有逻辑依赖于线程优先级,否则可能产生意外结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌AI公布新项目:未来你的宠物可能真的会是“机器”狗!

From: Tech Crunch; 作者&#xff1a;Iris????或许你曾留心过狗是怎么行走的——它们走起路来肌腱运动流畅&#xff0c;步履灵活&#xff0c;并不必去思考下一步要怎么走&#xff0c;走路这个动作是自然而然发生的事情。而同样的动作&#xff0c;机器狗能够处理得这样自然吗…

Sass基础知识及语法

sass Sass是一款强化css的辅助工具&#xff0c;他在css语法中的基础上增加了变量&#xff08;variables&#xff09;、嵌套&#xff08;nested rules&#xff09;、混合&#xff08;mixns&#xff09;、导入&#xff08;inline impoarts&#xff09;等高级功能&#xff0c;这些…

java王大拿谢大脚_《乡村爱情1》:“王大拿”赵本山有3大亮点,追谢大脚根本不算啥...

《乡村爱情》第一部其实导演并不是赵本山&#xff0c;那时候的他和该剧的导演张惠中是好友关系&#xff0c;里面的各大主演除了“王小蒙”王亚彬外其余都是以赵本山的徒弟为主&#xff0c;很多人都是冲着赵本山的名气来观看这部剧的。其实赵本山在《乡村爱情》第一部中饰演的“…

记忆的天空:智能进化三部曲

作者&#xff1a;钟振余&#xff0c;宁波大学 相对于人工智能的快速发展&#xff0c;人类对于生命智能的理解显得很肤浅。由于缺失大脑活动原理的理论指导&#xff0c;人们只能用知识考试去评判一个人的智能&#xff0c;用相当于几岁孩子的智能去比对某些高级动物的智能。事实上…

day27 CRM delete action 嵌入CRM

课程目录:deleteactionpop up window嵌入crm项目权限&#xff08;未讲&#xff09;学员交作业发邮件 代码路径&#xff1a;https://github.com/liyongsan/git_class/tree/master/day27/LuffyCRM 权限预习&#xff1a;http://www.cnblogs.com/alex3714/articles/6661911.html 转…

java中 若干,Java中的随机数发生器。产生若干的复杂性

I am aware that Java uses a Linear congruential generator. My question is- what is the complexity of generating a random number? How do you perform such analyses?解决方案The complexity of generating a random number is O(1). Do you mean "what are its…

收藏!机器学习算法分类图谱及其优缺点综合分析

来源&#xff1a;必达智库近日&#xff0c;Coggle对各类机器学习算法进行了归纳整理&#xff0c;形成了一个较为完整的机器学习算法分类图谱&#xff0c;并对每一类算法的优缺点进行了分析。具体分类如下&#xff1a;正则化算法&#xff08;Regularization Algorithms&#xff…

StringBuilder String string.Concat 字符串拼接速度再议

首先看测试代码&#xff1a; 1 public class StringSpeedTest2 {3 private readonly static string _testStr "0123456789";4 5 public string StringAdd(int count)6 {7 string str string.Empty;8 for (i…

mysql查询数据为0的所有字段6_MySQL8.0 初级学习笔记(六)查询数据

MySQL8.0 初级学习笔记(六)查询数据MySQL8.0 初级学习笔记(六)查询数据查询有多种方法&#xff1a;单表查询&#xff0c;使用集合函数查询&#xff0c;连接查询&#xff0c;子查询&#xff0c;合并查询结果&#xff0c;为表和字段取别名&#xff0c;使用正则表达式查询一、单表…

特斯拉Autopilot事故频发,真正意义上自动驾驶还要多久问世?

这并不是特斯拉 Autopilot 首次发生事故致死案例。来源&#xff1a;未来汽车科技的新能源汽车更替传统汽车是时代趋势&#xff0c;作为业内先驱&#xff0c;身处聚光灯下的特斯拉不可避免会受到大众关注&#xff0c;例如涉及它的每一次交通安全事件从不会在媒体报道中缺席。据外…

BDD 与DSL 入门

正文&#xff1a; Behavior Driven Development&#xff0c;行为驱动开发是一种敏捷软件开发的技术&#xff0c;它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。在了解Behavior Driven Development之前&#xff0c;先介绍Test-Driven Development(TDD)即测试…

CICC科普栏目|颠覆认知!看完这些图,你的世界观还好吗?

本文系网易新闻网易号“各有态度”特色内容部分资料来源于网络转自&#xff1a;超级数学建模接下来&#xff0c;仔细看下面的图与文字你会非常震撼……每天&#xff0c;地球上都有这么多的人在飞来飞去&#xff0c;就像下图中一样。▼图中圈圈里头的人口&#xff0c;比其他地区…

python indices_python numpy triu_indices函数

numpy.triu_indices返回函数的上三角矩阵numpy.triu_indices(n,k0,mNone)[source]Return the indices for the upper-triangle of an (n, m) array.Parameters: n : intThe size of the arrays for which the returned indices will be valid.k : int, optionalDiagonal offse…

django-xadmin使用之更改菜单url

环境&#xff1a;xadmin-for-python3 python3.5.2 django1.9.12 1. 在模块的adminx.py文件中增加以下代码&#xff1a; class AdminSettings(object):site_title XXX Data Centersite_footer XXX Inc.# menu_style accordion# 菜单设置def get_site_menu(self):return ({tit…

RISC-V会彻底改变计算吗?

来源&#xff1a;内容由半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;编译自「ACM」&#xff0c;谢谢。微处理器的开放指令集有望重塑计算&#xff0c;并引入新的、更强大的功能。现代计算机依靠许多元件来提供高速和高性能&#xff0c;但是很少有比一台精简的指…

如何将随机数存入数组java_JAVA怎么把随机数赋给数组

JAVA怎么把随机数赋给数组来源:互联网 宽屏版 评论2012-05-29 12:50:14分类: 电脑/网络 >> 程序设计 >> 其他编程语言问题描述:double aMath.random();可以产生个随机数&#xff0c;怎么产生100个这样的随机数然后赋值给数组并输出呢&#xff1f;参考答案:public…

java keystore ca_PKCS12 Java Keystore from CA and User certificate in java

问题Ive recently been put in charge of mocking up an Apple product (iPhone Configuration Utility) in Java. One of the sections Ive been a bit stuck on is a part about Exchange ActiveSync. In there, it allows you to select a certificate from your Keychain t…

干货|六维力和力矩传感器的技术与应用

来源&#xff1a;机器人大讲堂六维力和力矩传感器是一种提供三轴力和三轴力矩反馈的设备&#xff0c;并广泛应用在机器人控制、力学实验和科研等不同的场景中。不同于其他常见的测力仪器&#xff0c;六维力和力矩传感器可以测量完整的六自由度环境力数据&#xff0c;从而使其适…

Spark笔记——技术点汇总

Spark笔记——技术点汇总 目录 概况 手工搭建集群 引言 安装Scala 配置文件 启动与测试 应用部署 部署架构 应用程序部署 核心原理 RDD概念 RDD核心组成 RDD依赖关系 DAG图 RDD故障恢复机制 Standalone模式的Spark架构 YARN模式的Spark架构 应用程序资源构建…

人工智能正在推动芯片的复兴

来源丨Forbes作者丨Rob Toews编译丨科技行者半导体是数字时代的一项基础技术。美国硅谷的名字正是源自于此。过去半个世纪以来&#xff0c;计算技术的革命改变着社会的方方面面&#xff0c;而半导体技术正是这场革命的核心。自英特尔1971年推出全球第一个微处理器以来&#xff…