概述
-
线程中的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"); } }
没调用的运行结果:
调用后的运行结果:
4、yield()
yield()
yield()执行后线程直接进入了就绪状态,马上释放了CPU的执行权,让出资源,但是依然保留CPU执行资格,有可能下次CPU调度就会让这个线程继续执行。
最后
以上就是喜悦大碗为你收集整理的面试题_线程中的sleep()、wait()、join()、yield()的全部内容,希望文章能够帮你解决面试题_线程中的sleep()、wait()、join()、yield()所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复