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/11
6 * 定义一个类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); 该方法的参数值要有效(不能为负数),否则会抛出异常。

2. join方法
public final void join() throws InterruptedException
- 异常
InterruptedException- 如果任何线程中断当前线程。 当抛出此异常时,当前线程的中断状态将被清除。 - 下例是当myThread1死亡之后才执行其它线程,还未死亡之前是不能执行其它任何线程的。
1 package com.tianjh.thread;
2
3
4 /**
5 * Created on 2021/1/11
6 * 定义一个类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 }
测试结果:

3. setDaemon
public final void setDaemon(boolean on)
线程启动前必须调用此方法。
- 参数
on- 如果true,将此线程标记为守护线程 - 异常
IllegalThreadStateException- 如果这个线程是 aliveSecurityException- 如果checkAccess()确定当前线程不能修改此线程-
1 package com.tianjh.thread;
2
3
4 /**
5 * Created on 2021/1/11
6 * 定义一个类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());测试结果:

Thread线程控制之sleep、join、setDaemon方法的用处的更多相关文章
- Java Thread线程控制
一.线程和进程 进程是处于运行中的程序,具有一定的独立能力,进程是系统进行资源分配和调度的一个独立单位. 进程特征: A.独立性:进程是系统中独立存在的实体,可以拥有自己独立的资源,每个进程都拥有自己 ...
- java 之Thread线程相关yield()、sleep()、wait()、join()、run和start方法详解
1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...
- Thread线程join方法自我理解
Thread线程join方法自我理解 thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.jo ...
- python threading queue模块中join setDaemon及task_done的使用方法及示例
threading: t.setDaemon(True) 将线程设置成守护线程,主进行结束后,此线程也会被强制结束.如果线程没有设置此值,则主线程执行完毕后还会等待此线程执行. t. ...
- 线程中的setDaemon方法
setDaemon方法必须在start方法前定义.t1.setDaemon(True),该语句的意思是:将主线程A设置为子线程t1的守护线程.也就是在执行程序时,t1会随着主线程A的退出而退出,不论t ...
- python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon)
python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon) 前言 今天小编YOYO请xiaoming和xiaowang吃火锅,吃完火锅的时候会有以下三种场景: - ...
- python多线程中join()方法和setDaemon()方法的区别
""" join()方法:主线程A中,创建了子线程B,并且在主线程中调用了B.join()方法,那么主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行 ...
- C# Thread.Join的报错情形——论执行完的线程能够成功执行Join吗
结论: 能, 执行完的线程调用Join不会抛出错误. Thread.Join()是什么? Join()函数用于阻塞地等待线程结束, 其行为是在线程A中调用了线程B的Join()后, 线程A将一直阻塞在 ...
- 面经手册 · 第20篇《Thread 线程,状态转换、方法使用、原理分析》
作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...
随机推荐
- Hbase的基本原理(与HIVE的区别、数据结构模型、拓扑结构、水平分区原理、场景)
重点:HBase的基本数据模型.拓扑结构.部署配置方法,并介绍通过命令行和编程方式使用HBase的基本方法. HBase:一种列存储模式与键值对相结合的NoSQL软件,但更多的是使用列存储模式,底层的 ...
- LZZ磁力资源搜索4.2.2,整合多个站点,大部分资源都能搜到
资源搜索 4.2.2.20200310网友提出的功能已完成1:新增 时间日期排序,单击表头或右键菜单选择,即可自动排序2:新增 搜索完毕 音效开启或关闭 选项3:资源站点 Sunyaa 由聚合站点改为 ...
- 如何建一个SAM
部分改编自OI WIKI 先从一个简单的问题入手: 给定一个串,构造一个图,使其能够表示它的所有子串. 显然一个子串就是一个后缀的前缀.所以一个很显然的方式就是把所有后缀扔进trie里. 比如当前串是 ...
- Struts2 S2-061(CVE-2020-17530)漏洞复现
0x00 漏洞简介 Apache Struts2框架是一个用于开发Java EE网络应用程序的Web框架.Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执 ...
- 移动 WEB 开发的布局方式 ---- 响应式布局
一.响应式简介 一个页面布局兼容了 PC端 ,iPad端 和 移动端 所谓的响应式就是页面中的布局会随着屏幕的大小变化发生了响应而做出不同的页面布局模型 特点: 响应式布局是不需要单独写移动端页面的 ...
- Idea+Git+GitHub图文教程,一篇教程帮你搞定
导语 该文章主要记录如何在GitHub上创建远程仓库.如何创建本地仓库并把代码提交到GitHub.如何创建分支以及分支合并到主干的操作. 一.在GitHub上创建远程仓库 (前提:已经注册过githu ...
- 四、LoadRunner11安装和破解
之前安装了LoadRunner12 社区版的,应为满足不了工作需求, 上网仔细查了教程下来LoadRunner11破解版 链接:https://pan.baidu.com/s/1dM8Lwf4p160 ...
- C#实现SHA256WithRSA加密用于Java的秘钥私钥
首先要把Java秘钥进行转换,然后再进行加密 转制秘钥的方法 public static string RSAPrivateKeyJava2DotNet(string privateKey) { Rs ...
- css 14-CSS3属性详解:Web字体
14-CSS3属性详解:Web字体 #前言 开发人员可以为自已的网页指定特殊的字体(将指定字体提前下载到站点中),无需考虑用户电脑上是否安装了此特殊字体.从此,把特殊字体处理成图片的方式便成为了过去. ...
- AddressSanitizer —— ASAN分析内存错误
简介 AddressSanitizer 是一个性能非常好的C/C++ 内存错误探测工具. 它由编译器的插桩模块和替换了malloc函数的运行时库组成. 这个工具可以探测如下这些类型的错误: 对堆.栈和 ...