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)

将此线程标记为daemon线程或用户线程。 当运行的唯一线程都是守护进程线程时,Java虚拟机将退出。

线程启动前必须调用此方法。

参数 on - 如果 true ,将此线程标记为守护线程
异常
IllegalThreadStateException - 如果这个线程是 alive
SecurityException - 如果 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方法的用处的更多相关文章

  1. Java Thread线程控制

    一.线程和进程 进程是处于运行中的程序,具有一定的独立能力,进程是系统进行资源分配和调度的一个独立单位. 进程特征: A.独立性:进程是系统中独立存在的实体,可以拥有自己独立的资源,每个进程都拥有自己 ...

  2. java 之Thread线程相关yield()、sleep()、wait()、join()、run和start方法详解

    1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...

  3. Thread线程join方法自我理解

    Thread线程join方法自我理解 thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.jo ...

  4. python threading queue模块中join setDaemon及task_done的使用方法及示例

    threading:     t.setDaemon(True)  将线程设置成守护线程,主进行结束后,此线程也会被强制结束.如果线程没有设置此值,则主线程执行完毕后还会等待此线程执行.     t. ...

  5. 线程中的setDaemon方法

    setDaemon方法必须在start方法前定义.t1.setDaemon(True),该语句的意思是:将主线程A设置为子线程t1的守护线程.也就是在执行程序时,t1会随着主线程A的退出而退出,不论t ...

  6. python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon)

    python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon) 前言 今天小编YOYO请xiaoming和xiaowang吃火锅,吃完火锅的时候会有以下三种场景: - ...

  7. python多线程中join()方法和setDaemon()方法的区别

    """ join()方法:主线程A中,创建了子线程B,并且在主线程中调用了B.join()方法,那么主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行 ...

  8. C# Thread.Join的报错情形——论执行完的线程能够成功执行Join吗

    结论: 能, 执行完的线程调用Join不会抛出错误. Thread.Join()是什么? Join()函数用于阻塞地等待线程结束, 其行为是在线程A中调用了线程B的Join()后, 线程A将一直阻塞在 ...

  9. 面经手册 · 第20篇《Thread 线程,状态转换、方法使用、原理分析》

    作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...

随机推荐

  1. 第 4篇 Scrum 冲刺博客

    一.站立式会议 1.站立式会议照片 2.昨天已完成的工作 登录信息的匹配 3.今天计划完成的工作 ①售货员页面功能 ②销售排行 4.工作中遇到的困难 ①页面按钮太过复杂,逻辑错乱 ②有的同学数据库驱动 ...

  2. 中间件面试专题:kafka高频面试问题

  3. Shell:子shell概念

    Blog:博客园 个人 目录 shell环境 什么是子shell 子shell的分类 shell环境 每个shell进程有一个自己的运行环境,不同的Shell进程有不同的Shell环境.Shell解析 ...

  4. CentOS 用户请关注,你期待的 CentOS Linux 9 再也不会来了

    2020年12月晚上红帽官网发布了一条公告,宣布了几件事情: 将不会发行 CentOS Linux 9 CentOS Linux 8 的更新支持持续到2021年12月31日 CentOS Linux ...

  5. AcWing 407. 稳定的牛分配

    大型补档计划 题目链接 题目看的有点晕(语文差) 总体来说就是让每头牛找个谷仓,不能超过容量,最小化每头牛在的谷仓在自己心目中排名的极差. 显然这个最优性问题不好做,但是转换为判定性问题这就是一个标准 ...

  6. 浏览器开发者工具network详解

    General概诉 请求链接 Request URL: 请求方式 Request Method: 代码状态 Status Code: 远程地址 Remote Address: 引用协议 用于过滤 Re ...

  7. K8S安装Kubesphere

    准备工作 安装Helm curl -L https://git.io/get_helm.sh | bash 创建账户 cat > heml-rbac.yaml << EOF apiV ...

  8. [OI笔记]基础图论/图算法

    [2017.8.29 00:00]--前几天开始好好学了几天的图论,不过这最近又突然因为一些原因(其实是晚上没睡好导致白天没精神)颓废了几天-一方面为了控制自己同时也可以当做之后noip前复习用的笔记 ...

  9. 网站开发学习Python实现-Django学习-总结(6.1.2)

    @ 目录 1.MVT 2.模型 3.视图 4.模板 5.常用的命令 6.pycharm创建django工程 关于作者 1.MVT 项目结构如下,其中项目同名文件夹为配置文件 每一个项目有多个应用(未考 ...

  10. 多任务-python实现-同步概念,互斥锁解决资源竞争(2.1.4)

    @ 目录 1.同步的概念 2.解决线程同时修改全局变量的方式 3.互斥锁 1.同步的概念 同步就是协同步调,按照预定的先后次序进行运行,如你说完我在说 同步在子面上容易理解为一起工作 其实不是,同指的 ...