Thread线程控制之sleep、join、setDaemon方法的用处

Thread线程控制之sleep、join、setDaemon方法的用处

  1. sleep方法
public static void sleep(long millis) throws InterruptedException

使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。 线程不会丢失任何显示器的所有权。

参数 millis - 以毫秒为单位的睡眠时间长度
异常 IllegalArgumentException - 如果 millis值为负数
InterruptedException - 如果任何线程中断当前线程。 当抛出此异常时,当前线程的中断状态将被清除。

下面将使用sleep方法使线程暂停指定的秒数(两秒)

 1 package com.tianjh.thread;2 3 4 /**5  * Created on 2021/1/116  * 定义一个类MyThread继承Thread类7  * 在MyThread类中重写run()方法8  *9  * @author tianjh
10  */
11 public class MyThread extends Thread {
12 
13     public MyThread() {
14     }
15 
16     public MyThread(String name) {
17         /*
18          * 调用父类的带参构造方法
19          * public Thread(String name) {
20          *     init(null, null, name, 0);
21          *  }
22          */
23         super(name);
24     }
25 
26     @Override
27     public void run() {
28         for (int i = 0; i < 10; i++) {
29             // Thread类的getName()方法: 返回此线程的名称
30             System.out.println(getName() + ":" + i);
31             try {
32                 // 使线程停留两秒之后在执行
33                 Thread.sleep(2000);
34             } catch (InterruptedException e) {
35                 e.printStackTrace();
36             }
37         }
38     }
39 
40     public static void main(String[] args) {
41         // 1.创建MyThread类的对象
42         MyThread myThread1 = new MyThread("线程1");
43         MyThread myThread2 = new MyThread("线程2");
44         MyThread myThread3 = new MyThread("线程3");
45 
46         // 2.启动线程
47         myThread1.start();
48         myThread2.start();
49         myThread3.start();
50 
51     }
52 }

Thread.sleep(-2000); 该方法的参数值要有效(不能为负数),否则会抛出异常。

  1. join方法
public final void join() throws InterruptedException

等待这个线程死亡。
异常 InterruptedException - 如果任何线程中断当前线程。 当抛出此异常时,当前线程的中断状态将被清除。
下例是当myThread1死亡之后才执行其它线程,还未死亡之前是不能执行其它任何线程的。

1 package com.tianjh.thread;2 3 4 /**5  * Created on 2021/1/116  * 定义一个类MyThread继承Thread类7  * 在MyThread类中重写run()方法8  *9  */
10 public class MyThread extends Thread {
11 
12     public MyThread() {
13     }
14 
15     public MyThread(String name) {
16         super(name);
17     }
18 
19     @Override
20     public void run() {
21         for (int i = 0; i < 10; i++) {
22             System.out.println(getName() + ":" + i);
23         }
24     }
25 
26     public static void main(String[] args) {
27         // 1.创建MyThread类的对象
28         MyThread myThread1 = new MyThread("线程1");
29         MyThread myThread2 = new MyThread("线程2");
30         MyThread myThread3 = new MyThread("线程3");
31 
32         // 2.启动线程
33         myThread1.start();
34         try {
35             // 等待myThread1线程死亡,只有当该线程死亡之后才能继续执行其它线程
36             myThread1.join();
37         } catch (InterruptedException e) {
38             e.printStackTrace();
39         }
40         myThread2.start();
41         myThread3.start();
42 
43     }
44 }
  1. setDaemon
public final void setDaemon(boolean on)

将此线程标记为daemon线程或用户线程。 当运行的唯一线程都是守护进程线程时,Java虚拟机将退出。线程启动前必须调用此方法。

参数 on - 如果 true ,将此线程标记为守护线程
异常
IllegalThreadStateException - 如果这个线程是 alive
SecurityException - 如果 checkAccess()确定当前线程不能修改此线程 
1 package com.tianjh.thread;2 3 4 /**5  * Created on 2021/1/116  * 定义一个类MyThread继承Thread类7  * 在MyThread类中重写run()方法8  *9  */
10 public class MyThread extends Thread {
11 
12     public MyThread() {
13     }
14 
15     public MyThread(String name) {
16         super(name);
17     }
18 
19     @Override
20     public void run() {
21         for (int i = 0; i < 100; i++) {
22             System.out.println(getName() + ":" + i);
23         }
24     }
25 
26     public static void main(String[] args) {
27         // 1.创建MyThread类的对象
28         MyThread myThread1 = new MyThread("线程1");
29         MyThread myThread2 = new MyThread("线程2");
30 
31         // 设置当前main为主线程
32         Thread.currentThread().setName("主线程");
33 
34         /*
35          * 设置为守护线程
36          * 当运行的剩余线程都是守护进程线程时,Java虚拟机将退出。
37          * 也就是当main线程执行完之后就只剩myThread1、myThread2线程了,它们都是守护线程,
38          * 所以此时JVM会退出,也就不再继续执行其它线程了
39          * 线程启动前必须调用setDaemon()方法
40          */
41         myThread1.setDaemon(true);
42         myThread2.setDaemon(true);
43 
44         // 2.启动线程
45         myThread1.start();
46         myThread2.start();
47 
48         // 让主线程执行10次
49         for (int i = 0; i < 10; i++) {
50             System.out.println(Thread.currentThread().getName() + ":" + i);
51         }
52 
53     }
54 }
public final boolean isDaemon()
测试这个线程是否是守护线程。
结果  
true:如果这个线程是一个守护线程;
false:不是守护线程。
1         myThread1.setDaemon(true);
2         myThread2.setDaemon(true);
3 
4         // 2.启动线程
5         myThread1.start();
6         myThread2.start();
7 
8         System.out.println("myThread1线程是否为守护线程? "+myThread1.isDaemon());

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

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

相关文章

VUE解决跨域问题

一、什么是跨域 当在Vue应用中通过axios等工具发送HTTP请求时&#xff0c;如果请求的目标URL与当前页面的域名、协议、端口号不一致&#xff0c;就会触发浏览器的同源策略限制&#xff0c;导致跨域问题。 跨域问题是由浏览器引起的安全限制&#xff0c;而不是Vue框架本身导致…

记录搭建linux虚拟机学习jenkins自动化部署的全过程

安装虚拟机教程参考 https://juejin.cn/post/7250009145915719740?searchId2024060409134616191B1350EC8E073921 持续集成环境(1)-Jenkins安装 1&#xff09; 安装JDK Jenkins需要依赖JDK&#xff0c;所以先安装JDK1.8 yum install java-1.8.0-openjdk* -y 安装目录为&#…

HTTP相关面试题

1. HTPP基本概念 HTTP是超文本传输协议。本质上就是一个可以传输图片、视频、文字的计算机与计算机之间的协议 1.1. HTTP常见的状态码 2XX状态码: 主要用于表示已经服务器已经成功的处理了请求 [200 ok ]: 是最常见的状态码,表示我们请求成功且响应内容(响应头body)已经收到…

c# 开发的wpf程序闪退,无法用try catch捕获异常

之前开发的一个程序是c#wpf开发&#xff0c;基于.net framework 4.6.1的&#xff0c;一切都是正常的&#xff0c;但是在我重新装了win11后在程序logo出现后直接闪退&#xff0c;报错 返回值为 -1073740791 (0xc0000409)&#xff0c;而且定位到代码时发现是&#xff0c; publi…

【遂愿赠书 - 2期】:618火热来袭,网络安全书单推荐

文章目录 一、网络安全书单背景二、网络安全与编程实践书单2.1 &#x1f3f0;《内网渗透实战攻略》2.2 &#x1f6e1;️《Kali Linux高级渗透测试&#xff08;原书第4版&#xff09;》2.3 &#x1f396;️《CTF那些事儿》2.4 &#x1f680;《权限提升技术&#xff1a;攻防实战与…

kettle学习总结(1)

1&#xff0c;kettle下载 kettle本身是Java开发的开源项目&#xff0c;由于某种原因&#xff0c;目前官网已经不支持下载了&#xff0c;可到我的CSDN中下载 下载完后&#xff0c;还需要安装JDK环境以及对应的数据库驱动包&#xff0c;需要注意的是 该kettle的版本较低&#xff…

惠海H6212L 48V转12V 36V转12V 24V转5V DCDC降压恒压模块供电芯片方案

内置60V高压MOS&#xff1a;H6212L内置了60V耐压的MOS&#xff0c;这使得它能够承受48V的输入电压&#xff0c;从而适应更多的电源环境。 宽电压输入范围&#xff1a;支持8V至48V的宽压输入范围&#xff0c;满足了不同应用场景的电源需求。 输出电压可调&#xff1a;支持输出…

旺店通·企业奇门对接打通金蝶云星空查询盘点盈亏统计接口与其他入库新增接口

旺店通企业奇门对接打通金蝶云星空查询盘点盈亏统计接口与其他入库新增接口 对接系统旺店通企业奇门 慧策最先以旺店通ERP切入商家核心管理痛点——订单管理&#xff0c;之后围绕电商经营管理中的核心管理诉求&#xff0c;先后布局流量获取、会员管理、仓库管理等其他重要经营模…

计算机图形学实验9 RayBounding Valume求交和 BVH查找

计算机图形学实验9 RayBounding Valume求交和 BVH查找 Github地址 RBV,BVH参考文章 前言 光线追踪的基本流程 像素网格生成&#xff1a;首先&#xff0c;我们需要为最终的图像建立一个二维像素网格。每个像素代表屏幕上的一个点&#xff0c;我们的目标是计算出这个点应该显…

重庆耶非凡科技人力rpo蓝海项目能不能做?

随着市场经济的不断发展和企业对人才需求的日益增长&#xff0c;人力资源外包(HRO)已成为众多企业优化资源配置、提升管理效率的重要手段。其中&#xff0c;招聘流程外包(RPO)作为HRO的重要组成部分&#xff0c;更是凭借其专业性和高效性受到了广泛关注。在此背景下&#xff0c…

idea2024年最新激活码,即拿即用

1、Idea2024年最新激活码 idea2024年最新激活码&#xff0c;即拿即用 K384HW36OB-eyJsaWNlbnNlSWQiOiJLMzg0SFczNk9CIiwibGljZW5zZWVOYW1lIjoibWFvIHplZG9uZyIsImxpY2Vuc2VlVHlwZSI6IlBFUlNPTkFMIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdG…

linux业务代码性能优化点

planning优化的一些改动----------> 减少值传递&#xff0c;多用引用来传递 <---------- // ----------> 减少值传递&#xff0c;多用引用来传递 <---------- // 例1&#xff1a; class A{}; std::vector<A> v; // for(auto elem : v) {} // 不建议&#xff…

HiWoo Cloud物联网云平台

在科技日新月异的今天&#xff0c;物联网&#xff08;IoT&#xff09;已经成为推动社会进步的重要力量。而物联网云平台&#xff0c;作为连接万物、实现智能交互的核心&#xff0c;更是备受瞩目。今天&#xff0c;就让我们一起走进HiWoo Cloud的世界&#xff0c;探寻这款物联网…

云计算中网络虚拟化的核心组件——NFV、NFVO、VIM与VNF

NFV NFV&#xff08;Network Functions Virtualization&#xff0c;网络功能虚拟化&#xff09;&#xff0c;是一种将传统电信网络中的网络节点设备功能从专用硬件中解耦并转换为软件实体的技术。通过运用虚拟化技术&#xff0c;NFV允许网络功能如路由器、防火墙、负载均衡器、…

学习axios拦截器

axios拦截器的作用&#xff1a;用于在请求发送前和响应返回后对请求和响应进行统一处理&#xff0c;例如添加公共请求头、处理请求参数、统一处理错误信息等。拦截器提供了一种灵活、高效的方式来管理HTTP请求和响应&#xff0c;帮助在前端开发中更好地处理数据交互。 这是一个…

YY2/BUB3轴通过调节染色体不稳定性促进SAC过度激活并抑制结直肠癌进展

引用信息 文 章&#xff1a;YY2/BUB3 Axis promotes SAC Hyperactivation and Inhibits Colorectal Cancer Progression via Regulating Chromosomal Instability. 期 刊&#xff1a;Advanced Science&#xff08;影响因子&#xff1a;15.1&#xff09; 发表时间&#…

外文文献下载阅读工具有哪些?

下载和阅读外文文献的工具有很多&#xff0c;其中一些常用的工具包括&#xff1a; Google 学术&#xff1a;可以通过 Google 学术搜索引擎查找和下载大量的学术文献&#xff0c;包括英文文献。 ResearchGate&#xff1a;一个学术交流平台&#xff0c;提供了许多学术论文的下载…

关于vue开发的几个问题

vue前端代码放置了几个月时间&#xff0c;再开发发现一些版本或者配置的问题&#xff0c;记录下来。 一、yarn add总报错certificate has expired 尝试了各种办法&#xff0c;更新或重装yarn&#xff08;npm install --global yarn&#xff09;&#xff0c;清除缓存&#xff…

揭秘业务系统数据安全三大核心问题:“谁在用”、“用什么”和“怎么用”

数据库宛如一座坚固的宝库&#xff0c;守护着无尽的智慧与财富—数据&#xff0c;如同熠熠生辉的金币。当宝库的门紧闭时&#xff0c;金币得以安然无恙。 然而&#xff0c;在业务系统的广阔天地中&#xff0c;这些数据金币被精心挑选、流通使用&#xff0c;每一枚都承载着无尽…

Master-Worker 架构的灰度发布难题

作者&#xff1a;石超 一、前言 Master-Worker 架构是成熟的分布式系统设计模式&#xff0c;具有集中控制、资源利用率高、容错简单等优点。我们数据中心内的几乎所有分布式系统都采用了这样的架构。 &#xfeff; 我们曾经发生过级联故障&#xff0c;造成了整个集群范围的服…