Java线程中的sleep和wati的区别以及join、yield方法

mac2025-02-06  15

1.sleep来自Thread类,而wait来自Object类;

2.sleep方法没有释放锁,它是使线程休眠一段时间。在sleep休眠时间到期后,线程不一定立即恢复执行,除非系统没有其它更高优先级的任务正在执行。而wait方法释放了锁,它是线程间实现同步的一种机制。调用wait的线程会主动进入等待状态,直到被其它线程唤醒或者等待超时;

3.wait,notify,notifyAll只能在同步方法或者同步代码块使用,而sleep可以在任何地方使用;

4.wait可以指定时间也可以不指定时间,而sleep必须指定时间;

5.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常。

扩展: join()方法:把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行。 比如:在线程B中调用了线程A的join()方法,直到线程A执行完毕后,才会继续执行线程B。

public static void main(String[] args) { System.out.println(“main start”); Thread t1 = new Thread(); t1.start(); t1.join(); System.out.println("main end"); }

main线程要等到t1线程运行结束后,才会输出“main end”。

yield()方法:让掉当前线程 CPU 的时间片,使正在运行中的线程重新变成就绪状态,并重新竞争 CPU 的调度权。它可能会获取到,也有可能被其他线程获取到。

最新回复(0)