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 的调度权。它可能会获取到,也有可能被其他线程获取到。