五、线程优先级和守护线程
java 中的线程优先级的范围是1~10,默认的优先级是5。“高优先级线程”会优先于“低优先级线程”执行。优先比不是绝对。
java 中有两种线程:用户线程和守护线程。可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程是“用户线程”;否则就是“守护线程”。
用户线程一般用户执行用户级任务,而守护线程也就是“后台线程”,一般用来执行后台任务。需要注意的是:Java虚拟机在“用户线程”都结束后会后退出。
在一些运行的主线程中创建新的子线程时,子线程的优先级被设置为等于“创建它的主线程的优先级”,当且仅当“创建它的主线程是守护线程”时“子线程才会是守护线程”。
当Java虚拟机启动时,通常有一个单一的非守护线程(该线程通过是通过main()方法启动)。JVM会一直运行直到下面的任意一个条件发生,JVM就会终止运行:
(01) 调用了exit()方法,并且exit()有权限被正常执行。
(02) 所有的“非守护线程”都死了(即JVM中仅仅只有“守护线程”)。
每一个线程都被标记为“守护线程”或“用户线程”。当只有守护线程运行时,JVM会自动退出。
优先级示例:
public class ThreadTest {public static void main(String [] args){Thread thread1 = new Thread(new Runnable(){@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println(Thread.currentThread().getName()+",Priority="+Thread.currentThread().getPriority()+",i="+i);}}});Thread thread2 = new Thread(new Runnable(){@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println(Thread.currentThread().getName()+",Priority="+Thread.currentThread().getPriority()+",i="+i);}}});thread1.setPriority(1);thread2.setPriority(10);thread1.start();thread2.start();} }
结果:
Thread-0,Priority=1,i=0 Thread-1,Priority=10,i=0 Thread-1,Priority=10,i=1 Thread-1,Priority=10,i=2 Thread-1,Priority=10,i=3 Thread-1,Priority=10,i=4 Thread-1,Priority=10,i=5 Thread-1,Priority=10,i=6 Thread-1,Priority=10,i=7 Thread-1,Priority=10,i=8 Thread-1,Priority=10,i=9 Thread-0,Priority=1,i=1 Thread-0,Priority=1,i=2 Thread-0,Priority=1,i=3 Thread-0,Priority=1,i=4 Thread-0,Priority=1,i=5 Thread-0,Priority=1,i=6 Thread-0,Priority=1,i=7 Thread-0,Priority=1,i=8 Thread-0,Priority=1,i=9
大多数情况都是优先级高的先运行,但不是绝对。
守护线程示例:
package com.fla.thread;public class DaemonTest {public static void main(String[] args) {Thread thread1 = new Thread(new Runnable(){@Overridepublic void run() {for(int i=0;i<100;i++){System.out.println(Thread.currentThread().getName()+",Daemon="+Thread.currentThread().isDaemon()+",i="+i);}}});Thread thread2 = new Thread(new Runnable(){@Overridepublic void run() {for(int i=0;i<10;i++){System.out.println(Thread.currentThread().getName()+",Daemon="+Thread.currentThread().isDaemon()+",i="+i);}}});thread1.setDaemon(true);thread1.start();thread2.start();} }
结果:
Thread-0,Daemon=true,i=0 Thread-1,Daemon=false,i=0 Thread-1,Daemon=false,i=1 Thread-1,Daemon=false,i=2 Thread-1,Daemon=false,i=3 Thread-1,Daemon=false,i=4 Thread-1,Daemon=false,i=5 Thread-1,Daemon=false,i=6 Thread-1,Daemon=false,i=7 Thread-1,Daemon=false,i=8 Thread-1,Daemon=false,i=9 Thread-0,Daemon=true,i=1 Thread-0,Daemon=true,i=2 Thread-0,Daemon=true,i=3 Thread-0,Daemon=true,i=4 Thread-0,Daemon=true,i=5 Thread-0,Daemon=true,i=6 Thread-0,Daemon=true,i=7 Thread-0,Daemon=true,i=8 Thread-0,Daemon=true,i=9 Thread-0,Daemon=true,i=10
在“主线程main”和“子线程Thread-1”(它们都是用户线程)执行完毕,只剩Thread-0这个守护线程的时候,JVM自动退出。
转载于:https://www.cnblogs.com/futiansu/p/5620949.html
五、线程优先级和守护线程相关推荐
- Java多线程系列--“基础篇”10之 线程优先级和守护线程
概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括: 1. 线程优先级的介绍 2. 线程优先级的示例 3. 守护线程的示例 转载请注明出处:http://www.cnblogs.com/s ...
- 线程优先级和守护线程
线程优先级 线程优先级代表着线程抢占CPU的概率,优先级越高越有可能抢占到CPU.不一定优先级越高的线程就先执行,只是代表概率. 线程优先级在1~10之间. package com.yf.demo04 ...
- Python编程基础:第五十九节 守护线程Daemon Threading
第五十九节 守护线程Daemon Threading 前言 实践 前言 守护线程是在后台运行的线程,对程序的运行并不重要,你的程序在退出前不会等待守护线程的完成,此类线程的特点是,当程序中主线程及所有 ...
- 线程状态,优先级,守护线程基础详解
线程状态,优先级,守护线程基础详解 线程状态 停止线程 线程休眠 线程礼让 线程强制执行 线程状态检测 线程的优先级 守护线程 线程同步 线程状态 创建状态(new 之后就是创建状态 就绪状态(调用s ...
- 【多线程-线程状态、优先级、守护线程】
1. 观测线程状态 Thread.State 可以处于一下几种状态 NEW:尚未启动的线程处于此种状态 RUNABLE:在Java虚拟机中执行的线程处于此种状态 BLOCKED:被阻塞等待监视器锁定的 ...
- 线程安全、守护线程、join()
1. 线程安全 多个线程在访问同一个对象的时候不需要其他额外的同步手段或措施就能保证该对象被正确的访问并产生正确的执行结果.那么这个对象就是线程安全的. 线程安全的代码必须具备一个特征:代码本身封装了 ...
- 多线程、并发/并行、自定义线程类、线程安全、守护线程、定时器、线程状态、线程池
目录 进程和线程: 进程: 线程: 多线程的好处: 线程调度: 分时调度: 抢占式调度: 并发与并行: 线程的生命周期: 实现线程的两种基本方式(还有第三种): 创建Thread线程类: 创建Runn ...
- Java的守护线程和非守护线程
一.守护线程 java分为两种线程:用户线程和守护线程 守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分.因此 ...
- 守护线程与非守护线程的区别
守护线程与非守护线程 最近在看多线程的Timer章节,发现运用到了守护线程,感觉Java的基础知识还是需要补充. Java分为两种线程:用户线程和守护线程 所谓守护线程是指在程序运行的时候在后台提供一 ...
最新文章
- 对于PS和flash协作做过光字的一点心得
- 每天坚持一个CSS——社会人
- java IO之 File类+字节流 (输入输出 缓冲流 异常处理)
- 移动设备web文字单位_移动设备如何塑造现代Web设计
- .NET Core开发实战(第9课:命令行配置提供程序)--学习笔记
- 计算机辅助翻译的启示,翻译单位研究对计算机辅助翻译启示.PDF
- java 判断请求为 ajax请求_Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求...
- spark:SparkUI界面
- (转)Managed DirectX +C# 开发(入门篇)(七)
- 西数linux驱动程序,下载:西数移动硬盘WD SES Driver驱动更新
- matlab之数据拟合
- GFLOPs、GMACs、FMA之间的关系
- 基于Xilinx的FPGA下载配置详解及几种电路参考设计
- 一个有趣的模型组合预测模型
- 【UE4】使用UMG创建UI,了解内部机制及相应优化方法
- 不可思议有氧机器人_不思议迷宫机器人生产线选什么好 机器人合成公式一览...
- 超详细的bat脚本常用命令及亲测示例
- Lync 2010升级到Lync 2013 之设定企业联盟!
- H5怎么制作?快来看这个H5制作平台的案例你可能就明白了
- 什么是JPA、JPA的基础实战
热门文章
- python怎么向列表中添加内容_Python中向List添加元素方法
- python 线程中出现执行错乱_python线程中的同步问题
- Qt实践录:常见控件操作示例2
- 记一次FFMPEG转avi视频保存到ftp服务器的失败尝试
- cad怎么快速算面积_微信收到CAD图纸打不开怎么办?2种方法教你手机CAD快速看图...
- 【Flink】Insufficient number of network buffers required but only available
- 【ElasticSearch】Es 源码之 NamedWriteableRegistry 源码解读
- 95-130-340-源码-source-kafka相关-FlinkKafkaConsumer分析
- 95-150-080-源码-Sink-StreamingFileSinkBucketingSink
- kylin: NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf