java线程控制

news2025/7/10 9:27:12

java线程控制的语法很多 这里我们主要说以下三个方法
在这里插入图片描述

我们先新建一个包

包下建立两个类
customException 线程类
参考代码如下

public class customException extends Thread {
    public String name;

    public customException(){

    }
    public void run(){
        for(int i = 0;i < 100;i++){
            System.out.println(getName()+"第"+(i + 1)+"次输出");
        }
    }
}

text 测试类
参考代码如下

public class text {
    public static void main(String args[]) {
        customException com1 = new customException();
        customException com2 = new customException();
        customException com3 = new customException();
        com1.setName("刘备");
        com2.setName("孙权");
        com3.setName("曹操");
        com1.start();
        com2.start();
        com3.start();
    }
}

然后 我们运行代码
在这里插入图片描述
我们可以看到 曹操既然没有干过刘备和孙权
把记录往上翻
在这里插入图片描述
我们看到 刚开始 我们的孙权也是非常的给力 但再执行一次 你会发现 他们谁快谁慢 完全是随机的

但按照历史 孙权和刘备应该要慢一些

我们改写 customException 类中的 run方法如下

public class customException extends Thread {
    public String name;

    public customException(){

    }
    public void run(){
        for(int i = 0;i < 100;i++){
            if(getName() == "孙权"||getName() == "刘备") {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(getName()+"第"+(i + 1)+"次输出");
        }
    }
}

这里我们取getName方法 就是获取当前的线程名称 判断 如果是 孙权或刘备 则 执行Thread中的sleep 里面是休眠的时间数
这样 每次孙权和刘备的线程执行时 都会先休眠一秒

我们运行代码如下
在这里插入图片描述
这里我们可以看到 曹操都跑完了 孙权和刘备总共也没执行几次 甚至才刚开始

因为他们每次执行都会先休眠一秒 而在计算机中 一秒可以做非常非常多的事

这就是sleep线程休眠的语法

我们去customException类中
把刚写的休眠代码去掉

然后我们改一下测试类的线程名称
在这里插入图片描述
康熙 四阿哥 八阿哥

这是一场皇位争夺战 但他们如果一起执行 谁快谁慢都不好说

但康熙是他们的父亲 啊 要等康熙挂了 他们才能开始抢啊

我们修改测试类main方法如下

public static void main(String args[]) {
   customException com1 = new customException();
   customException com2 = new customException();
   customException com3 = new customException();
   com1.setName("康熙");
   com2.setName("四阿哥");
   com3.setName("八阿哥");
   com1.start();
   try {
       com1.join();
   } catch (InterruptedException e) {
       e.printStackTrace();
   }
   com2.start();
   com3.start();
}

join方法就会强行控制 com1线程走完之后 其他线程才能继续执行
在这里插入图片描述
这就是第二个语法 强行 指定某个线程执行完毕 其他线程才能接着往下走

然后我们更改 customException 线程类的代码如下

public class customException extends Thread {
    public String name;
    public int age;

    public customException(int age){
        this.age = age;
    }
    public void run(){
        for(int i = 0;i < age;i++){
            System.out.println(getName()+"第"+(i + 1)+"次输出");
        }
    }
}

text测试类 代码如下

public class text {
    public static void main(String args[]) {
        customException com1 = new customException(10);
        customException com2 = new customException(100);
        customException com3 = new customException(100);
        com1.setName("总统");
        com2.setName("保镖");
        com3.setName("助理");
        com1.start();
        com2.start();
        com3.start();
    }
}

这是可以看到 我们将线程的次数 改成了 用age变量控制 而这个变量是customException构造函数中控制的
而我们总统传了 10 保镖和助理传了一百

在这里插入图片描述
执行之后 理所当然 总统执行了10次 但其他两个执行了 100次
但总统退休了 他们也就改退休了啊

我们这里改写text类中的main方法

public static void main(String args[]) {
    customException com1 = new customException(10);
    customException com2 = new customException(100);
    customException com3 = new customException(100);
    com1.setName("总统");
    com2.setName("保镖");
    com3.setName("助理");
    com1.start();
    com2.setDaemon(true);
    com3.setDaemon(true);
    com2.start();
    com3.start();
}

这是 我们将 com2和com3 都设置成立守卫线程 主线程结束之后 他们也会结束 我们运行代码
在这里插入图片描述
我们可以看到 保镖和助理执行了十几次也停了 因为主线程已经结束了
有些人就会说 主线程结束 他们不应该立马结束吗?
主线程结束 守卫线程还有一点反应时间才结束
这样总统退休 保镖和助理也就光荣下岗啦

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

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

相关文章

逆变器电力计量仪表可安装在分布式光伏运维云平台、光伏变电站

安科瑞 李可欣 1、概述 AcrelCloud-1200分布式光伏运维云平台通过监测光伏站点的逆变器设备&#xff0c;气象设备以及摄像头设备、帮助用户管理分散在各地的光伏站点。主要功能包括&#xff1a;站点监测&#xff0c;逆变器监测&#xff0c;发电统计&#xff0c;逆变器一次图&…

解决找不到依赖项的问题(根源直接解决)

&#xff08;文章最后&#xff0c;我会介绍一个万能解决方法&#xff09; 问题&#xff1a; 原因&#xff1a; &#xff08;1&#xff09;可能是你的本地仓库里没有该依赖项。 &#xff08;2&#xff09;如果有的话&#xff0c;可能是没有更新同步到idea 解决方法&#xff1…

基于Springboot+mybatis+mysql+html教育培训中心教学系统

基于Springbootmybatismysqlhtml教育培训中心教学系统一、系统介绍二、功能展示1.用户登陆2.用户注册3.个人中心4.人员信息管理5.课程管理6.缴费管理7.学生考勤管理8.器材管理9.问题管理&#xff08;学生、老师&#xff09;一、系统介绍 系统主要功能&#xff1a; 管理员&…

第五届“传智杯”全国大学生计算机大赛(练习赛)[传智杯 #5 练习赛] 时钟

[传智杯 #5 练习赛] 时钟 题目描述 你有一个电子钟&#xff0c;可以显示 0:00 到 23:59 之间的所有时间&#xff0c;以数字的形式显示。其中小时是 0 到 23&#xff08;0 时会显示一个 0&#xff0c;而 1 到 9 时不会显示前导 0&#xff09;&#xff0c;分钟是 00 到 59&…

矩阵分析与计算学习记录-矩阵函数

本章重点内容&#xff1a; 矩阵函数的定义和计算 矩阵函数的导数和积分&#xff1a;导数定义和性质、对矩阵变量的导数、矩阵函数的积分及其性质 利用矩阵函数求解线性常系数微分方程&#xff1a;一阶线性常系数微分方程、n阶线性常系数微分方程 1. 矩阵函数的定义和计算 1…

前端面试总结

自我检查&#xff1a; 1、 vue有哪些常用的指令 2、 v-if和v-show的区别? v-show 控制的哪个css元素?v-if和v-show初始条件都为false的时候哪个会加载? 3、 3.Vue常用的修饰符? .sync 怎么在子组件触发修改父组件属性的值?具体是$emit哪个事件触发修改? .sync 的原理有了…

栈的应用----括号匹配问题

1.题目 括号匹配 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合…

Linux常见指令与shell理解

Linux常用指令与shell理解 文章目录Linux常用指令与shell理解1. ls指令2. cd指令3. pwd命令4. touch指令5. mkdir指令6. rmdir和rm指令7. man指令8. cp指令9. mv指令10. cat与tac指令11. more指令12. less指令13. head指令14. tail指令15. 时间指令16. Cal指令17. find指令18. …

[附源码]SSM计算机毕业设计置地房屋租赁信息系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2E服务-WriteDataByIdentifier

诊断协议那些事儿 诊断协议那些事儿专栏系列文章&#xff0c;本文介绍数据传输服务下的2E服务WriteDataByIdentifier&#xff0c;允许客户端在通过提供的dataidentifier数据标识符指定的内部位置将信息写入服务器。 参考文章&#xff1a; 数据传输功能单元——DID参数定义 2…

汇编语言与微机原理 期末复习题整理(大题)

写出实现下列计算的指令序列。&#xff08;假定X、Y、Z、W、R都为有符号字变量&#xff09; Z 2*&#xff08;W-X&#xff09;/&#xff08;5*Y&#xff09; ;因为(5*Y)会出现32位变量&#xff0c;32位变量不能作为除数&#xff0c;所以需要改变运算顺序 MOV AX,W ;AX←W S…

【算法05】合并两个有序链表

目录 问题 思路 版本一 版本二 答案 版本一 版本二 问题 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例二&a…

[附源码]java毕业设计球队管理系统论文

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

四十三、Fluent增强收敛性-伪瞬态计算

0. 伪瞬态作用 为什么要使用伪瞬态的算法&#xff1f;伪瞬态的作用实际上是增加收敛性的&#xff0c;当你的稳态计算收敛性不好时&#xff0c;可以将稳态计算更改为伪瞬态计算&#xff0c;收敛性会增强。 当然还可以通过前面所说的降低松弛因子的方式来增强收敛性。 但是&#…

Contextual Transformer Networks for Visual Recognition

Contextual Transformer Networks for Visual Recognition一、引言&#xff08;一&#xff09;、Our Approach&#xff08;二&#xff09;、Multi-head Self-attention in Vision Backbones二、Contextual Transformer Block&#xff08;一&#xff09;、Contextual Transforme…

分享125个ASP源码,总有一款适合你

源码下载链接&#xff1a;https://pan.baidu.com/s/1qgovtTI3srp2A8oJKGxWlA?pwdpkhu 提取码&#xff1a;pkhu 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载后可以看到。 康城汽车租赁类网站系统 淘特 旅…

MySQL数据库面试题

基础知识 为什么要使用数据库/数据库的优点&#xff1f; 使用数据库可以高效且条理分明地存储数据&#xff0c;它使人们能够更加迅速和方便地管理数据&#xff0c;主要体现在以下几个方面。 数据库可以结构化存储大量的数据信息&#xff0c;方便用户进行有效的检索和访问。数…

docker介绍及使用

简介 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 原理 Docker核心解决的问题是利用L…

M1 安装CentOS 8安装完成后无法联网怎么办?

一、首先看安装是否有问题 安装完成 VMware Fusion Tech Preview 可以打开偏好设置 选择网络,解锁后 添加一个自定义的 vmnet3 然后 按照下面的图进行设置, 注意 子网IP 可以不填 会自动生成,下图是我已经生成后的,你生成应该是不一样的地址 终端进入到 cd Library/Preference…

第四章. Pandas进阶—数据转换

第四章. Pandas进阶 4.5 数据转换 数据转换一般包括一列数据转换成多列数据&#xff0c;行列转换&#xff0c;DataFrame转换为字典&#xff0c;列表和元组等 1.一列数据转换成多列数据(str.split函数) 1).语法&#xff1a; DataFrame.str.split(patNone,n-1,expandFalse)参数…