线程常用方法

41 篇文章 2 订阅

目录

1. 线程终⽌

2. 线程等待 join

3. yield 让出执⾏权

4. 获取当前线程

5. 休眠当前线程


1. 线程终⽌

线程的常用属性及获取方法(2)_小bit~的博客-CSDN博客

2. 线程等待 join

有时,我们需要等待⼀个线程完成它的⼯作后,才能进⾏⾃⼰的下⼀步⼯作。例如,李四只有等
张三下班了他才上班,这时我们需要⼀个⽅法明确等待线程的结束。

public class ThreadByJoin {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            //1. 张三开始上班
            System.out.println("1. 张三开始上班 :" + LocalDateTime.now());
            //2. 张三正在上班
            try {
                Thread.sleep(10 * 1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //3. 张三下班
            System.out.println("3. 张三下班: " + LocalDateTime.now());
        });
        // 启动程序
        t1.start();
        // 等待线程 t1 执行完之后,再执行后面的代码
        t1.join();
        t1.join(500);

        Thread t2 = new Thread(() -> {
            //1. 李四开始上班
            System.out.println("1.李四开始上班:" + LocalDateTime.now());
            // 2.李四正在上班
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 3.李四下班
            System.out.println("3.李四下班:" + LocalDateTime.now());
        });
        t2.start();

    }
}

输出:
1. 张三开始上班 :2022-03-28T12:20:43.495
3. 张三下班: 2022-03-28T12:20:53.497
1.李四开始上班:2022-03-28T12:20:53.498
3.李四下班:2022-03-28T12:20:54.498

3. yield 让出执⾏权

public class ThreadYield {
    public static void main(String[] args) {

        Thread t1 = new Thread(() -> {
            Thread cThread = Thread.currentThread();
            for (int i = 0; i < 5; i++) {
                Thread.yield();
                System.out.println("执行了线程:" + cThread.getName());
            }
        },"张三");
        t1.start();

        //创建并启动线程
        new Thread(() -> {
            Thread cThread = Thread.currentThread();
            for (int i = 0; i < 5; i++) {
                System.out.println("执行线程:" + cThread.getName());
            }
        },"李四").start();
    }
}

输出:
执行了线程:张三
执行了线程:张三
执行了线程:张三
执行线程:李四
执行线程:李四
执行线程:李四
执行线程:李四
执行线程:李四
执行了线程:张三
执行了线程:张三

yield方法会让出CPU的执行权,让线程调度器重新调度线程,但还是有一定的记录又再一次调用到出让CPU的线程上的,这一次他就会执行线程的方法了,因为yield已经被执行过了。 

4. 获取当前线程

 

public class ThreadDemo {
    public static void main(String[] args) {
        Thread thread = Thread.currentThread();
        System.out.println(thread.getName());
   }
}

5. 休眠当前线程

休眠线程有两种实现:
        a. 使⽤ sleep 休眠
        b. 使⽤ TimeUnit 休眠

 a. 使⽤ sleep 休眠

 

public class ThreadDemo {
    public static void main(String[] args) throws InterruptedException {
        System.out.println(System.currentTimeMillis());
        Thread.sleep(3 * 1000);
        System.out.println(System.currentTimeMillis());
   }
}

b. 使⽤ TimeUnit 休眠

import java.util.concurrent.TimeUnit;

TimeUnit.DAYS.sleep(1);//天
TimeUnit.HOURS.sleep(1);//⼩时
TimeUnit.MINUTES.sleep(1);//分
TimeUnit.SECONDS.sleep(1);//秒
TimeUnit.MILLISECONDS.sleep(1000);//毫秒
TimeUnit.MICROSECONDS.sleep(1000);//微妙
TimeUnit.NANOSECONDS.sleep(1000);//纳秒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值