java 中的线程优先级的范围是1~10,默认的优先级是5。“高优先级线程”会优先于“低优先级线程”执行。

Java线程的优先级不是很靠谱,因为:

1):不同平台的优先级实现不同

Java的线程优先级是映射到系统的线程优先级上的。线程调度方式取决于操作系统(os)的实现,很多os的提供的线程优先级和Java的线程优先级不是一一对应的。
例如:
Solaris中有 2^32 种优先级,而windows只有7种 。

2):优先级也会被系统改变

例如:Windows中有一个“优先级推进器”功能,当系统发现一个线程执行的特别勤奋的话,会越过线程优先级去给它分配系统执行时间。从而可以减少上下文切换的开销,提高系统的运行效率。

用户线程和守护线程

JDK 中关于线程优先级和守护线程的介绍如下:

每个线程都有一个优先级。“高优先级线程”会优先于“低优先级线程”执行。每个线程都可以被标记为一个守护进程或非守护进程。在一些运行的主线程中创建新的子线程时,子线程的优先级被设置为等于“创建它的主线程的优先级”,当且仅当**“创建它的主线程是守护线程”时“子线程才会是守护线程”**。

可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程是“用户线程”;否则就是“守护线程”。用户线程一般用于执行用户级任务,而守护线程也就是“后台线程”,一般用来执行后台任务。
需要注意的是:Java虚拟机在“用户线程”都结束后会后退出。

可以通过设置标志位来分别创建用户线程和守护线程

//此方法只能在thread.start()方法调用之前执行,否则会抛出IllegalThreadStateException
thread.setDaemon(false);

当Java虚拟机启动时,通常有一个单一的非守护线程(该线程通过是通过main()方法启动)。JVM会一直运行直到下面的任意一个条件发生,JVM就会终止运行:

  1. 调用了exit()方法,并且exit()有权限被正常执行
  2. 所有的“非守护线程”都死了(即JVM中仅仅只有“守护线程”)

Java线程的优先级相关推荐

  1. java 多线程4: java线程的优先级

    Java线程的优先级取值范围是1 (Thread.MIN_PRIORITY ) 到 10 (Thread.MAX_PRIORITY ).如果没有设置, 线程默认的优先级是NORM_PRIORITY.这 ...

  2. java线程的优先级是数字越大优先级越高_《深入理解Java虚拟机》5分钟速成:12章(Java内存模型与线程)...

    第12章 Java内存模型与线程 前言: 1.物理机如何处理并发问题? 2.什么是Java内存模型? 3.原子性.可见性.有序性的具体含义和应用实现? 4.volatile 关键字特性? 5.基于vo ...

  3. 并发基础(三): java线程优先级小试牛刀

    一.概述 在不同的JVM中(JVM也算是一个操作系统),有着不同的CPU调度算法,对于大部分的JVM来说,优先级也是调度算法中的一个参数. 所以,线程优先级在一定程度上,对线程的调度执行顺序有所影响, ...

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

    Java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行(不完全正确,请参考下面的"线程优先级的问题"). 记住当线程的优先级没有指定时,所有线程都携带普 ...

  5. 了解Java线程优先级,更要知道对应操作系统的优先级,不然会踩坑

    Java 多线程系列第 6 篇. 这篇我们来看看 Java 线程的优先级. Java 线程优先级 Thread 类中,使用如下属性来代表优先级. private int priority; 我们可以通 ...

  6. java最高线程优先级是,Java线程优先级

    详细内容 Java 线程优先级 Thread 类中,使用如下属性来代表优先级.private int priority; 我们可以通过 setPriority(int newPriority) 来设置 ...

  7. Java多线程 -- 线程的优先级

    Java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行(不完全正确,请参考下面的"线程优先级的问题"). 优先级的取值 Java线程的优先级是一个整数, ...

  8. Java线程有哪些不太为人所知的技巧与用法?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:rrd.me/fukFv 萝卜白菜各有所爱.像我就喜欢Jav ...

  9. java线程基础知识

    Java 多线程编程 Java 给多线程编程提供了内置的支持. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 多线程是多任务的一种特别的形式,但多 ...

最新文章

  1. P3924 康娜的线段树(マジやばくね)(线段树、期望、前缀和)难度⭐⭐⭐★
  2. Java高并发编程基础之AQS
  3. 是否可以在Gradle中声明一个可用于Java的变量?
  4. Java机器学习库ML之六关于模型迭代训练的思考
  5. oracle之基本的过滤和排序数据
  6. HTML5 Canvas 高仿逼真 3D 布料图案效果
  7. error:java:无效的源发行版_IDEA java出现无效的源发行版14解决方案_java
  8. springboot中注入FilterRegistrationBean不生效原因
  9. 平稳序列的预测和拟合之模型识别
  10. 油猴脚本使用waitForKeyElements报错eslint: no-undef - `waitForKeyElements` is not defined
  11. ZOJ3545——AC自动机+状态dp
  12. Vue的数据依赖实现原理简析
  13. Spring-发送QQ邮件
  14. 超市便利店批发行业企业仓库,使用盘点机PDA扫描商品条码高效盘点,库存管不准怎么办
  15. mpeg4和mp4格式一样吗?
  16. 《阿哈!算法》4-1不撞南墙不回头 4-2 解救小哈——深度优先搜索
  17. Python爬虫 Selenium实现自动登录163邮箱和Locating Elements介绍
  18. Visual Studio 2019 发行说明
  19. ApacheCN×Tesra 免费算力申请活动
  20. akka学习教程(十四) akka分布式实战

热门文章

  1. mysql安装10045_mysql数据库5.6.45安装后的配置(离线安装包版)
  2. 男人的那些统一话术......
  3. 黑客大佬:我是如何让50个文件一起骗过AI安防系统的?
  4. 众望所归!中国机器狗能【后空翻】了。。。
  5. 触发键盘_雷蛇这款光轴机械键盘开箱评测,光速触发,颜值爆表
  6. java aop execution_Spring AOP -- execution表达式
  7. rabbitmq入门_Rabbit MQ 入门
  8. lisp正负调换_坐标提取lisp程序
  9. 微型计算机c560,2010广东省计算机等级考试试题 二级C试题最新考试试题库
  10. php crypt mysql password_php使用crypt()函数进行加密