并发基础(七)——Thread 类的sleep()、yeild()、join()

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 并发基础(七)——Thread 类的sleep()、yeild()、join()

1、Thread.sleep(long millis )

sleep( )是一个静态方法,让当前正在执行的线程休眠(暂停执行),而且在睡眠的过程是不释放资源的,保持着锁。 在睡眠的过程,可以被中断,注意抛出InterruptedException异常;

作用:

1、暂停当前线程一段时间; 2、让出CPU,特别是不想让高优先级的线程让出CPU给低优先级的线程


try {
        //单位是毫秒,睡眠1秒
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

2、Thread.yeild()

同样也是一个静态方法,暂停当前正在执行的线程,线程由运行中状态进入就绪状态,重新与其他线程一起参与线程的调度。

作用:

线程让步,顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行。但是,这种让步只对同优先级或者更高优先级的线程而言,同时,让步具有不确定性,当前线程也会参与调度,即有可能又被重新调度,那么就没有达到让出CPU的效果了。

3、Thread.join()

JDK中提供三个版本的join方法:

  • join( ):等待该线程终止。- join(long millis):等待该线程终止的时间最长为 millis 毫秒。超时为 0 意味着要一直等下去。- join(long millis, int nanos):等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。 作用: join方法的作用是父线程等待子线程执行完成后再执行,换句话说就是将异步执行的线程合并为同步的线程。
    ```
    public static void main(String[] args) {

    Thread childThread = new Thread(“childThread”){
    @Override
    public void run() {
    int a = 1;
    for(int i=1;i<5;i++){
    a += i;
    }
    System.out.println(“线程”+getName()+”结束,Count a = “+a);
    }
    };
    //线程启动
    childThread.start();
    try {
    //main线程要等待childThread线程的结束,才可以往下执行
    childThread.join();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    System.out.println(“线程”+Thread.currentThread().getName()+”结束”);

}

```

运行结果:

线程childThread结束,Count a = 11 线程main结束

出处:

原文地址:https://sihai.blog.csdn.net/article/details/81194395

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 并发基础(七)——Thread 类的sleep()、yeild()、join()


 上一篇
shiro教程——记住我功能 shiro教程——记住我功能
虽然不太推荐使用记住我功能, 但是,还是讲一下这个功能,实际上大多数使用session来管理。 1、applicationContext-shiro.xml文件 &lt;!-- 安全管理器 --&gt; &am
2021-04-04
下一篇 
并发基础(八) java线程的中断机制 并发基础(八) java线程的中断机制
1. 引言当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务。Java没有提供一种安全直接的方法来停止某个线程,但是Java提供了中断机制
2021-04-04