当前位置: 首页 > news >正文

第三百一十八节 Java线程教程 - Java线程优先级、Java守护线程

Java线程教程 - Java线程优先级

所有线程都有优先级。

优先级由1到10之间的整数表示。

优先级为1的线程优先级最低。优先级为10的线程具有最高优先级。

在Thread类中定义了三个常量来表示下表中列出的三个不同的线程优先级。

线程优先级常量整数值
MIN_PRIORITY1
NORM_PRIORITY5
MAX_PRIORITY10

具有较高优先级的线程应该有更多的CPU时间。

线程的优先级只是调度器的一个提示。

Thread类的setPriority()方法为线程设置了新的优先级。

getPriority()方法返回线程的当前优先级。

创建线程时,其优先级设置为创建线程的优先级。

例子

以下代码演示如何设置和获取线程的优先级。

public class Main {public static void main(String[] args) {Thread t = Thread.currentThread();System.out.println("main Thread  Priority:" + t.getPriority());Thread t1 = new Thread();System.out.println("Thread(t1) Priority:" + t1.getPriority());t.setPriority(Thread.MAX_PRIORITY);System.out.println("main Thread  Priority:" + t.getPriority());Thread t2 = new Thread();System.out.println("Thread(t2) Priority:" + t2.getPriority());// Change thread t2 priority to minimumt2.setPriority(Thread.MIN_PRIORITY);System.out.println("Thread(t2) Priority:" + t2.getPriority());}
}

上面的代码生成以下结果。

Java线程教程 - Java守护线程

线程可以是守护线程或用户线程。

守护线程是服务提供者线程。

当JVM检测到应用程序中的所有线程都只是守护线程时,它将退出应用程序。

我们可以通过使用setDaemon()方法通过传递true作为参数,使线程成为一个守护线程。

我们必须在启动线程之前调用一个线程的setDaemon()方法。否则,一个java.lang。抛出IllegalThreadStateException。

我们可以使用isDaemon()方法来检查线程是否是守护线程。

创建线程时,其守护程序属性与创建线程的线程相同。

例子

以下代码创建一个线程并将线程设置为守护线程。

public class Main {public static void main(String[] args) {Thread t = new Thread(Main::print);t.setDaemon(true);t.start();System.out.println("Exiting main  method");}public static void print() {int counter = 1;while (true) {try {System.out.println("Counter:" + counter++);Thread.sleep(2000); // sleep for 2 seconds} catch (InterruptedException e) {e.printStackTrace();}}}
}

上面的代码生成以下结果。

例2

以下代码将线程设置为非守护线程。由于这个程序有一个非守护线程,JVM将继续运行应用程序,即使在main()方法完成后。

您必须强制停止此应用程序,因为线程在无限循环中运行。

public class Main {public static void main(String[] args) {Thread t = new Thread(Main::print);t.setDaemon(false);t.start();System.out.println("Exiting main  method");}public static void print() {int counter = 1;while (true) {try {System.out.println("Counter:" + counter++);Thread.sleep(2000); // sleep for 2 seconds} catch (InterruptedException e) {e.printStackTrace();}}}
}

上面的代码生成以下结果。


http://www.mrgr.cn/news/70167.html

相关文章:

  • 升级浏览器
  • Linux 常用操作指令大揭秘(下)
  • ubontu--cuDNN安装
  • 小程序服务商常见问题
  • LeetCode【0017】电话号码的字母组合
  • WebStorm 如何调试 Vue 项目
  • 鸿蒙NEXT开发笔记(十三)仿微信聊天App的BASE64转像素图
  • kafka(启动集群,使用spring方法,自定义配置)
  • webpack 性能优化方案 - 代码分离(分包)
  • 部署Apollo 9.0-1 安装docker(阿里源安装)
  • 解读Nature:Larger and more instructable language models become less reliable
  • Android13 默认开启冻结进程
  • 电销智能机器人,怎么使用,操作复杂吗?
  • linux rocky 9.4部署和管理docker harbor私有源
  • ANDROIDWORLD: A Dynamic Benchmarking Environment for Autonomous Agents论文学习
  • Rust实战项目与未来发展——跨平台应用开发项目实践
  • 智慧机房建设整体解决方案
  • 基于h5 移动网赚项目设计与实现springboot+论文源码调试讲解
  • 【Windows】一条命令搞定文件移动与删除!`copy`、`move`、`del`详解
  • 量化研究----网格模型研究,提供源代码
  • Redis 典型应⽤-分布式锁
  • ArcGIS软件之“计算面积几何”地图制作
  • 【SSL-RL】自监督强化学习:随机潜在演员评论家 (SLAC)算法
  • Deepin 系统中安装Rider和Uno Platform
  • 《Django 5 By Example》阅读笔记:p1-p16
  • 前端-服务端渲染(SSR)和客户端渲染(CSR)的页面,在浏览器发出请求之后,分别返回的是什么