Java中多线程二

抢占调度模型

  • 概述:优先让优先级高的线程使用 CPU ,如果线程的优先级相同,那么随机会选择一个,优先级高的线程获取的 CPU 时间片相对多一些

  • Thread 类中一些关于线程的方法

    方法简述
    public final int getPriority()返回此线程的优先级
    public final void setPriority(int newPriority)设置此线程的优先级
  • 线程的优先级

    • 范围:从 1~10,线程默认优先级:5
    • 线程优先级高,仅仅表示线程获取CPU的时间片的几率高,但是要在次数比较多,或者多次运行的时候才能看到你想要的效果
    class MyThread extends Thread{private int val;public MyThread(int val){this.val = val;}@Overridepublic void run() {System.out.println(val);}
    }public class Test1 {public static void main(String[] args) {// 创建线程对象MyThread m1 = new MyThread(1);MyThread m2 = new MyThread(2);MyThread m3 = new MyThread(3);MyThread m4 = new MyThread(4);// 展示线程对象的优先级System.out.println("m1:" + m1.getPriority() + "\nm2:" + m2.getPriority()+ "\nm3:" + m3.getPriority() + "\nm4:" + m4.getPriority());// 设置优先级m1.setPriority(10);m2.setPriority(8);m3.setPriority(6);m4.setPriority(4);// 启动线程,查看结果m1.start();m2.start();m3.start();m4.start();}
    }
    

    注意:按照我们设置的优先级,m1 线程 抢到的几率是最高的,依次向下,但是,一定输出 1 2 3 4吗,不一定的,我们只是说,抢占的几率。

线程生命周期

  • 概述:线程的生命周期分为 4 个

    • 新建 (创建线程对象)
    • 就绪 (有执行资格,没有执行权)【举个简单的例子:商家有了营业资格证,但是他一定能在有证的那一刻营业吗】
    • 运行 (有执行资格,有执行权)
    • 死亡 (线程死亡,变成垃圾)
  • 生命周期图

    如果上述还未理解,我们结合这个例子看下:有个大型演唱会,邀请了很多明星(可理解为创建了对象),但是舞台呢,在某一时刻只允许一位明星表演,那在后边等待的人(有资格表演,但是现在没有权力登台),接着轮到这个明星(此时他既有资格,又有权力),如果顺利演唱结束(那就没他啥事了),但是如果突然他被爆料,那停止他的资格和执行权,直到查清后,他重新拥有资格,等待表演。

线程的一些控制方法

方法简述
static void sleep(long millis)使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性
void join()等待这个线程死亡。
public final void setDaemon(boolean on)如果 true ,将此线程标记为守护线程 将此线程标记为daemon线程或用户线程。 当运行的唯一线程都是守护进程线程时,Java虚拟机将退出。 线程启动前必须调用此方法。
案例一:让线程睡一会
public class Test2 {public static void main(String[] args) throws InterruptedException {printSlowly("你好,中国!欢迎来到编程世界!....",300);}public static void printSlowly(String text , long time) throws InterruptedException {// 字符串转换成字符数组for (char ch : text.toCharArray() ) {// 每打一个字,休息 0.3 秒Thread.sleep(time);System.out.print(ch);}}
}

运行上述程序,会出现 有趣的现象,大家可以运行看一下!

案例二:执行1秒就停了
import java.util.concurrent.TimeUnit;
public class Test3 {public static void main(String[] args) throws InterruptedException {String s = "欢迎来到编程世界,小哼与你一同学习,进步!";// 输出当前线程的名字System.out.println("程序开始执行,当前线程名:" + Thread.currentThread().getName());for (int i = 1; i <= 1 ; i++) {Thread thread = new Thread(new MyRunnable(s,200),"我的线程==" + i);// 设置为守护线程thread.setDaemon(true);thread.start();}// 参数意思:将 5 秒转换成 毫秒Thread.sleep(TimeUnit.SECONDS.toMillis(1));			// 运行后注释这行再试下}static class MyRunnable implements Runnable{private String text;private long time;public MyRunnable(String text , long time){this.text = text;this.time = time;}@Overridepublic void run() {try {printSlowly(text,time);} catch (InterruptedException e) {e.printStackTrace();}}}public static void printSlowly(String text , long time) throws InterruptedException {for (char ch : text.toCharArray()) {Thread.sleep(time);System.out.print(ch);}}
}

注意:我们运行程序,可以发现,设置为守护线程,当前线程只剩守护线程,会直接结束程序

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

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

相关文章

自动化控制面板-1Panel

一、1Panel自动化控制面板 官网地址 1Panel 可以实现&#xff1a; 快速建站、高效管理、安全可靠、一键备份、应用商店 快速建站&#xff1a;深度集成 Wordpress 和 Halo&#xff0c;域名绑定、SSL 证书配置等一键搞定&#xff1b;高效管理&#xff1a;通过 Web 端轻松管理 …

Docker启动报错:No chain/target/match by that name 处理

一、问题描述 某次OS升级重启后&#xff0c;发现docker redis实例无法启动&#xff0c;报错如下&#xff1a; Error response from daemon: driver failed programming external connectivity on endpoint vpm.redis.2 (f4b70fef65000bcacb574ee59e65d9b7a25f2abfa5dec0be9b74…

阿里云实时计算企业级状态存储引擎 Gemini 技术解读

本文整理自阿里云 Flink 存储引擎团队李晋忠&#xff0c;兰兆千&#xff0c;梅源关于阿里云实时计算企业级状态存储引擎 Gemini 的研究&#xff0c;内容主要分为以下五部分&#xff1a; 流计算状态访问的痛点企业级状态存储引擎GeminiGemini 性能评测&线上表现结语参考 一、…

2024年最新ChemiCloud优惠75%折扣WordPress外贸主机

ChemiCloud怎么样&#xff1f;ChemiCloud好不好&#xff1f;ChemiCloud是一家成立于2016年的云虚拟主机提供商&#xff0c;他们在全球范围内拥有多个机房&#xff0c;并以其出色的性价比而备受赞誉。他们整合了许多先进技术&#xff0c;包括Digital Ocean SSD云服务器、LiteSpe…

云计算任务调度仿真03

前面陆续分享了基于policy gradient和DQN实现的深度强化学习任务调度仿真&#xff0c;上次的DQN没有实现fix-qtarget和experience replay&#xff0c;这次再分享实现了这两个方法的DQN任务调度仿真。 经验重放&#xff0c;定义存储和存放次序&#xff0c;这里也可以自行修改 de…

提升测试效率,轻松并行运行测试——探秘Pytest插件pytest-xdist

在软件开发中&#xff0c;测试是确保代码质量的重要一环。然而&#xff0c;随着项目规模的增大&#xff0c;测试用例的数量也随之增多&#xff0c;测试的执行时间可能成为一个瓶颈。为了解决这个问题&#xff0c;Pytest提供了丰富的插件生态系统&#xff0c;其中 pytest-xdist …

[C#]调用tesseact-ocr的traineddata模型进行ocr文字识别

【框架地址】 https://github.com/charlesw/tesseract 【算法介绍】 Tesseract OCR是一个开源的光学字符识别引擎&#xff0c;它可以将图像中的文字转换成可编辑和可搜索的文本格式。Tesseract由惠普实验室于1985年开始开发&#xff0c;并在2005年被Google收购后成为了开源项…

api网关-kong

选型 api网关相关功能 服务的路由 动态路由负载均衡 服务发现 限流 熔断、降级 流量管理 黑白名单反爬策略 控制台&#xff1a;通过清晰的UI界面对网关集群进行各项配置。 集群管理&#xff1a;Goku网关节点是无状态的&#xff0c;配置信息自动同步&#xff0c;支持节点水…

7.云原生之jenkins集成SonarQube

1. 私有云实战之基础环境搭建 2. 云原生实战之kubesphere搭建 3.云原生之kubesphere运维 4. 云原生之kubesphere基础服务搭建 5.云原生安全之kubesphere应用网关配置域名TLS证书 6.云原生之DevOps和CICD 7.云原生之jenkins集成SonarQube 8.云原生存储之Ceph集群 文章目录 搭建 …

BGP公认任意属性——MED(二)

BGP公认任意属性有两个&#xff0c;分别是&#xff1a;Local-preference 和 MED&#xff0c;本期介绍MED。 点赞关注&#xff0c;持续更新&#xff01;&#xff01;&#xff01; MED 特点 MED &#xff08;多出口鉴别器&#xff09;&#xff0c;也称为BGP COST&#xff0c;…

usb静电防护芯片选择

方案1 USBLC6-2SC6 优缺点 优点&#xff1a;进出使用不同的焊盘&#xff0c;如果没有焊接好信号必定不能通过。有效的避免了虚焊导致故障。 缺点&#xff1a;不能省略&#xff0c;调试时也不能省略。 原理图 参考价格 参考来源 USB切换方案&#xff0c;多电脑共用USB方案…

高级路由学习试题

文章目录 高级路由学习试题一.高级路由题目答案 二.OSPF 相关答案 三.基础知识答案 高级路由学习试题 一.高级路由题目 1.以下属于ITOIP特性的有&#xff08;&#xff09; A、智能 B、开放 C、融合 D、标准 2.层级化网络模型将网络划分为&#xff08;&#xff09; A、汇…

“掌握家庭收支,轻松规划未来,记录日常开销的利器!“

你是否经常对家庭开支感到困惑&#xff0c;不知道钱都花在哪里了&#xff1f;或者想要更好地规划家庭的财务&#xff0c;却无从下手&#xff1f;现在&#xff0c;有了我们的收支明细工具&#xff0c;这些问题都将迎刃而解&#xff01; 第一步&#xff1a;首先我们要进入晨曦记账…

02.构建和使用的大型语言模型(LLMs)阶段

我们为什么要建立自己的LLMs?LLM从头开始编码是了解其机制和局限性的绝佳练习。此外,它还为我们提供了必要的知识,可以保留或微调现有的开源LLM架构,以适应我们自己的特定领域的数据集或任务。 研究表明,在建模性能方面,定制(LLMs为特定任务或领域量身定制的)可以胜过…

#华为nova12#系列带你解锁新年第一拍

这一次&#xff0c;华为nova 12 Ultra及nova 12 Pro为可变光圈赋予全新定义&#xff0c;让你无论是记录日常生活&#xff0c;自拍、还是捕捉萌宠、大合影、拍风景或者夜景光源都能轻松驾驭。 智能物理可变光圈让每一个场景都有适宜的光圈选择。可变光圈&#xff0c;全方位出圈…

Python流程控制语句

目录 一、分支结构 &#xff08;一&#xff09;单分支语句 &#xff08;二&#xff09;双分支语句 &#xff08;三&#xff09;多分支语句 &#xff08;四&#xff09;嵌套的分支语句 二、循环结构 循环结构概述 &#xff08;一&#xff09;for循环 &#xff08;二&am…

产品经理须知 | 电商API接口接入知识小结

应用程序接口API&#xff08;Application Programming Interface&#xff09;&#xff0c;是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统&#xff08;中后台系统&#xff09;或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

【网络】网络层ICMP协议

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…

数据结构02附录02:哈希表[C++]

图源&#xff1a;文心一言 上机题目练习整理~&#x1f95d;&#x1f95d; 本篇作为线性表的代码补充&#xff0c;每道题提供了优解和暴力解算法&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 第1版&#xff1a;在力扣新手村刷题的记录&#xff0c;优解是Bard老师提…

目标检测-One Stage-EfficientDet

文章目录 前言一、EfficientNetEfficientNet-B0 baselineMBConv 参数优化EfficientNet B0-B7 参数 二、EfficientDetBiFPN复合缩放方法 总结 前言 EfficientDet是google在2019年11月发表的一个目标检测算法系列&#xff0c;其提出的背景是&#xff1a;之前很多研究致力于开发更…