我是靠谱客的博主 喜悦大碗,最近开发中收集的这篇文章主要介绍面试题_线程中的sleep()、wait()、join()、yield(),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 线程中的sleep()、wait()、join()、yield()

    1、sleep()

    让当前正在执行的线程休眠(暂时)

    2、wait()

    执行wait(0后线程会放到等待池中,只有调用了notify()或者notifyAll()后等待池的线程才会去竞争锁

    notify()是随机抽取线程

    notifyAll()是把所有等待池中的线程放到锁池中

    sleep()和wait()常作比较,那么两者有哪些不一样呢?

    • leep()是Thread类的静态本地方法,wait()是Object类的本地方法
    • sleep()不会释放锁,wait()会释放
    • sleep()不依赖同步器synchronized,wait()依赖synchronized关键字
    • sleep()一般用于当前线程休眠,休眠之后退出阻塞,wait()用于多线程
    • sleep()会让CPU执行时间且强制上下文切换,wait()不会,wait()只有在线程调用notify()和notifyAll()时才有机会去竞争到锁继续执行线程。

    3、join()

    等待该线程终止的时间最长为多少毫秒

    join()执行后线程进入了阻塞状态,例如在线程A中调用了线程B的join(),那么线程A会在线程B执行完或者中断之后才能继续执行

    不调用join()和调用的区别

    public class ThreadDemo {
        public static void main(String[] args) throws  InterruptedException {
            Thread thread=new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("!!!!!!!!!!!!");
                }
            });
            thread.start();
            //后调用join()看结果
    //        thread.join();
            System.out.println("222222222222");
        }
    }
    

    没调用的运行结果:

    image-20210507233828932

    调用后的运行结果:

    image-20210507234002603

    4、yield()

    yield()

    yield()执行后线程直接进入了就绪状态,马上释放了CPU的执行权,让出资源,但是依然保留CPU执行资格,有可能下次CPU调度就会让这个线程继续执行。

最后

以上就是喜悦大碗为你收集整理的面试题_线程中的sleep()、wait()、join()、yield()的全部内容,希望文章能够帮你解决面试题_线程中的sleep()、wait()、join()、yield()所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部