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.hqwc.cn/news/337652.html

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

相关文章

夏目友人帐OVA:和猫咪老师的初次跑腿、曾几何时下雪之日 2013.12.15

夏目友人帐OVA 1、和猫咪老师的初次跑腿 / ニャンコ先生とはじめてのおつかい2、曾几何时下雪之日 / いつかゆきのひに 1、和猫咪老师的初次跑腿 / ニャンコ先生とはじめてのおつかい 和夏目一起外出的途中&#xff0c;猫咪老师因追蜻蜓遇到了一对迷路的龙凤胎兄妹。猫咪老师不…

软件测试----测试管理方法论

1、缺陷 &#xff08;1&#xff09;缺陷的主要变现&#xff1a; 1&#xff09;需求要求的功能没有实现 2&#xff09;实现了需求没有要求的功能 3&#xff09;软件中出现了明确指明不应该出现的错误 4&#xff09;需求虽未明确说明&#xff0c;但是应该实现的功能没有实现 5&…

Python冒号的解释

1. “没什么首次没有为第二个&#xff0c;跳了三个”。它得到的切片序列的每一个第三个项目。 扩展片是你想要的。新在Python 2.3 2. Python的序列切片地址可以写成[开始&#xff1a;结束&#xff1a;一步]和任何启动&#xff0c;停止或结束可以被丢弃。a[::3]是每第三个序列。…

用友U8流程审批效率-SQLServer+SSRS

文章目录 @[TOC]1、 需求及效果1.1 需求1.2 效果2、 思路及SQL语句3、实现折叠明细表4、结语1、 需求及效果 1.1 需求 想要查看U8的审批流程,查看流程在哪个节点或人停留的时间,这个单据整个流程走下来需要的时间。可以更加直观方便的查看审批效率 1.2 效果 采用了SSRS上…

JDBC初体验(一)

本课目标 理解JDBC的概念和工作原理 掌握JDBC的开发步骤 掌握 Connection 接口的使用 掌握Statement 接口的使用 掌握 ResultSet 接口的使用 一、JDBC 1.JDBC概述 JDBC&#xff08;Java DataBase Connectivity&#xff09;是Java数据库连接技术的简称&#xff0c;提供连…

Python实现PDF—>Excel的自动批量转换(附完整代码)

Python实现PDF—>Excel的自动批量转换&#xff08;附完整代码&#xff09; 话不多说&#xff0c;先看效果&#xff01; 需要转换的PDF&#xff1a; 转换后的Excel&#xff1a; 01、底层原理 PDF 到 Excel 的转换涉及不同文件格式之间的数据提取和重构。底层原理可以简…

手撕单链表(单向,不循环,不带头结点)的基本操作

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

【详解:两数之和三数之和四数之和】

本文讲解两数之和&#xff0c;三数之和和四数之和这三道经典双指针类型题。会在详解题目的同时给出AC代码【这三个题目从前往后是循序渐进的&#xff0c;非常巧妙】 目录 1、查找总价格为目标值的两个商品 2、三数之和 3、力扣18. 四数之和 1、查找总价格为目标值的两个商品…

SCS模型(径流曲线法)概述

目录 1.介绍&#xff1a;2.计算公式&#xff1a;参考文献&#xff1a;小结&#xff1a; 1.介绍&#xff1a; SCS模型&#xff08;径流曲线法&#xff09;是由美国农业部水土保持局(Soil Conservation Service) 基于经验提出&#xff0c;最初用于预测在农业用地小型流域降雨所累…

Django 框架添加管理员,完成对普通用户信息管理

前情回顾&#xff1a;Django框架 完成用户登录注册 文章目录 1.创建管理员2.完善管理员功能2.1增加管理员登录功能2.2完善展示用户信息功能2.3完善修改用户信息功能2.4完善删除用户信息功能 1.创建管理员 一般管理员都是直接指定&#xff0c;不开放页面注册&#xff0c;可以直…

【数据库系统概论】期末复习1

试述数据、数据库、数据库系统、数据库管理系统的概念。试述文件系统与数据库系统的区别和联系。试述数据库系统的特点。数据库管理系统的主要功能有哪些&#xff1f;试述数据库系统三级模式结构&#xff0c;这种结构的优点是什么&#xff1f;什么叫数据与程序的物理独立性&…

2024-01-03 无重叠区间

435. 无重叠区间 思路&#xff1a;和最少数量引爆气球的箭的思路基本都是一致了&#xff01;贪心就是比较左边的值是否大于下一个右边的值 class Solution:def eraseOverlapIntervals(self, points: List[List[int]]) -> int:points.sort(keylambda x: (x[0], x[1]))# 比较…