【多线程】-- 06 线程状态之线程停止与休眠

多线程

5 线程状态

  • 线程的五大状态:创建状态、就绪状态、阻塞状态、运行状态、死亡状态。如下图所示:

图1

具体解释如下:

图2

  • 线程方法:

图3

5.1 停止线程

  • 不推荐使用JDK提供的stop()方法、destroy()方法【已废弃 – deprecated
  • 推荐线程自己正常停止
  • 建议使用一个标志位进行终止变量:当flag = false,则终止线程运行
package com.duo.state;//测试stop
//1.建议线程正常停止 --- 利用循环次数,不建议死循环
//2.建议使用标志位 --- 主动设置一个标志位
//3.不要使用stop()、destroy()等deprecated方法public class StopTest implements Runnable {//1.先设置一个标志位private boolean flag = true;@Overridepublic void run() {int i = 0;while (flag) {System.out.println("run...Thread " + i++);}}//2.设置一个公开的方法以停止线程,转换标志位public void myStop() {this.flag = false;}public static void main(String[] args) {StopTest stopTest = new StopTest();new Thread(stopTest).start();for (int i = 0; i < 1000; i++) {System.out.println("main() " + i);if (i == 499) {stopTest.myStop();System.out.println("线程即将停止");}}}}

运行结果:

图4

可以发现,在i == 49时,通过调用转换标志位的停止线程方法myStop() {},”线程即将停止”,并在此后未有“run…Thread ii”语句输出,即线程已停止。

5.2 线程休眠

  • sleep()括号中指定当前线程阻塞的毫秒数
  • sleep存在异常InterruptedException
  • sleep时间达到后,线程进入就绪状态
  • sleep可以模拟网络延时、倒计时等
  • 每一个对象都有一个,sleep不会释放锁

这里还以之前抢火车票的代码为例:

package com.duo.state;//模拟网络延时:放大问题的发生性
public class SleepTest implements Runnable {private int ticketNum = 10;@Overridepublic void run() {while (ticketNum > 0) {//模拟延时try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "->抢到了第" + ticketNum-- + "张票");}}public static void main(String[] args) {SleepTest ticket = new SleepTest();new Thread(ticket, "ming").start();new Thread(ticket, "hua").start();new Thread(ticket, "hong").start();}
}

运行结果:

图5

可以发现,此时代码中的线程是不安全的,即多个线程操作了同一对象。(将会在之后加以修正改善)

下面模拟一个倒计时:

package com.duo.state;//模拟倒计时
public class SleepTest2 {public static void tenCounting() throws InterruptedException {int num = 10;do {Thread.sleep(1000);System.out.println(num--);} while (num > 0);}public static void main(String[] args) {try {tenCounting();} catch (InterruptedException e) {e.printStackTrace();}}
}

运行结果:

图6

其中,10~1的倒计时按照秒数倒数完成打印输出。

还可以通过sleep()打印系统当前时间:

package com.duo.state;import java.text.SimpleDateFormat;
import java.util.Date;//打印系统当前时间
public class SleepTest2 {public static void main(String[] args) {Date date = new Date(System.currentTimeMillis());  //先获取系统当前时间while (true) {try {Thread.sleep(1000);System.out.println(new SimpleDateFormat("HH:mm:ss").format(date));date = new Date(System.currentTimeMillis());  //更新系统当前时间} catch (InterruptedException e) {e.printStackTrace();}}}
}

运行结果:

图7


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

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

相关文章

NX二次开发UF_CSYS_create_csys 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_create_csys Defined in: uf_csys.h int UF_CSYS_create_csys(const double csys_origin [ 3 ] , tag_t matrix_id, tag_t * csys_id ) overview 概述 Creates a CSYS. 创…

el-select多选下拉框实现全选功能

<el-selectv-model"query.web_ids"multiplecollapse-tagscollapse-tags-tooltip:max-collapse-tags"2"filterableplaceholder"网站"><li class"checkAllBox" style"padding: 0 32px 0 20px; border-bottom: 1px solid #…

京东API接口的接入(京东工业)

在技术交流群&#xff0c;大家有探讨稳定获取京东商品主图、价格、标题&#xff0c;及sku的完整解决方案。这个引起了我技术挑战的兴趣。 目前&#xff0c;自己做了压测&#xff0c;QPS高、出滑块概率极低&#xff0c;API整体稳定&#xff0c;可满足业务场景的性能需求。 公共…

Unity接入Protobuf介绍

Protobuf介绍 Protobuf&#xff08;Protocol Buffers&#xff0c;简称Proto&#xff09;是一种轻量级和高效率的数据序列化格式&#xff0c;由Google公司开发。与XML和JSON等文本格式不同&#xff0c;Protobuf是一种二进制格式&#xff0c;它具有更小的体积和更快的速度。在大…

std::shared_ptr 和多态的组合使用//test ok

在 C 中&#xff0c;std::shared_ptr 和多态&#xff08;通过虚函数和基类指针/引用实现&#xff09;可以很好地结合使用。这种组合通常用于管理对象的生命周期&#xff0c;同时允许通过基类指针或引用来实现多态。 下面是一个简单的示例&#xff0c;演示如何使用 std::shared…

多传感器融合SLAM论文调研

感知任务 物体识别&#xff1a; 《Pointnet: Deep learning on point sets for 3d classification and segmentation》《Voxelnet: End-to-end learning for point cloud based 3d object detection》 语义分割&#xff1a; 《An integrated framework for autonomous driv…

Appium PO模式UI自动化测试框架——设计与实践

1. 目的 相信做过测试的同学都听说过自动化测试&#xff0c;而UI自动化无论何时对测试来说都是比较吸引人的存在。相较于接口自动化来说&#xff0c;它可以最大程度的模拟真实用户的日常操作与特定业务场景的模拟&#xff0c;那么存在即合理&#xff0c;自动化UI测试自然也是广…

面试题:海量PDF的OCR处理思路

关键点&#xff1a; 1000wPDF&#xff1a;数据量非常大。3天处理完&#xff1a;有时间限制。一篇PDF1~10s&#xff1a;可能需要以最高10s去做计算&#xff0c;这样时间才能保证留有富余。要求资源最大化利用&#xff1a;也就是尽可能节省服务器资源&#xff0c;能复用尽量复用&…

【EI会议征稿】第四届应用数学、建模与智能计算国际学术会议(CAMMIC 2024)

第四届应用数学、建模与智能计算国际学术会议&#xff08;CAMMIC 2024&#xff09; 2024 4th International Conference on Applied Mathematics, Modelling and Intelligent Computing 第四届应用数学、建模与智能计算国际学术会议&#xff08;CAMMIC 2024&#xff09;将于…

JOSEF约瑟 逆功率继电器 GG-21 5a 100v 50hz

系列型号 GG-21逆功率继电器 GG-22过载继电器 1 用途 逆功率继电器GG-21/5A/100V 在出现逆功率时&#xff0c;从电网中断开交流发电机。 2 概述 逆功率继电器是基于感应式原理(具有旋转磁场)而工作。 继电器导磁体由两个磁路系统组成&#xff1a;上磁路系统和下磁路系统…

FreeRTOS-事件组

目录 事件组 创建事件组 删除事件组 设置事件 等待事件 同步点 应用场景&#xff1a;等待多个事件 应用场景&#xff1a;任务同步 事件组 事件组可看成一个整形数&#xff0c;每一位代表一个事件。 每一位事件的含义由程序员决定&#xff0c;如位0表示串口是否就绪&…

快速掌握Pyqt5的9种显示控件

Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图&#xff08;Item View&#xff09; 快速弄懂Pyqt5的4种项目部件&#xff08;Item Widget&#xff09; 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…

【带头学C++】----- 八、C++面向对象编程 ---- 8.10 函数的默认参数

8.10 函数的默认参数 C在声明函数原型的时可为一个或者多个参数指定默认(缺省)的参数值&#xff0c;当函数调用的时候如果没有指定这个值&#xff0c;编器会自动用默认值代替。 通过为函数参数指定默认值&#xff0c;可以在调用函数时省略相应的参数&#xff0c;而该参数将使用…

陶陶摘苹果、跳跃游戏

1. 陶陶摘苹果 题目描述&#xff1a; 陶陶家的院子里有一棵苹果树&#xff0c;每到秋天树上就会结出 10 个苹果。苹果成熟的时候&#xff0c;陶陶就会跑去摘苹果。陶陶有个 30 厘米高的板凳&#xff0c;当她不能直接用手摘到苹果的时候&#xff0c;就会踩到板凳上再试试。 现在…

【MySQL源码】使用CLion 远程调试MySQL源码

目录 0 准备工作 1 IDE 2 下载MySQL源码 ​编辑 一 配置CLion 1 添加远程服务器 2 配置远程服务器环境 3 升级gdb版本 4 升级CMake版本 5 修改远程服务器文件上传的目录的对应关系 5 配置cmake 7 初始化MySQL 8 启动MySQL 作为DBA工作多年&#xff0c;如果还是停…

48个代码大模型汇总,涵盖原始、改进、专用、微调4大类

代码大模型具有强大的表达能力和复杂性&#xff0c;可以处理各种自然语言任务&#xff0c;包括文本分类、问答、对话等。这些模型通常基于深度学习架构&#xff0c;如Transformer&#xff0c;并使用预训练目标&#xff08;如语言建模&#xff09;进行训练。 在对大量代码数据的…

Leetcode(面试题 08.01.)三步问题

文章目录 前言一、题目分析二、算法原理1.状态表示2.状态转移方程3.初始化4.填表顺序5.返回值是什么 三、代码实现总结 前言 在本文章中&#xff0c;我们将要详细介绍一下Leetcode(面试题 08.01.)三步问题相关的内容 一、题目分析 1.小孩可以上一阶&#xff0c;两阶&#xff…

Shell脚本编程案例 – 批量创建特殊要求账户

Shell脚本编程案例 – 批量创建特殊要求账户 Shell Scripting Cases – Create a Bunch of accounts with special requests By JacksonML 本文简要介绍批量执行Shell脚本命令的基本思路&#xff0c;以检验shell脚本知识掌握情况。希望对读者有所帮助。 案例要求&#xff1a…

GO 集成Prometheus

一、Prometheus介绍 Prometheus&#xff08;普罗米修斯&#xff09;是一套开源的监控&报警&时间序列数据库的组合&#xff0c;起始是由SoundCloud公司开发的。随着发展&#xff0c;越来越多公司和组织接受采用Prometheus&#xff0c;社会也十分活跃&#xff0c;他们便…

Online ddl和replace ddl

在这个之前我们先来了解两种文件类型 1. .ibd文件 表数据文件&#xff0c;存储了表的数据和索引信息&#xff0c;从Mysql8开始表定义信息&#xff0c;从.frm文件改为.dcl文件存储&#xff0c;而表数据和索引信息仍然储存在.ibd文件&#xff0c;.idb文件通常在书籍库目录下。 …