sleep()和 wait()有什么区别
不同点:
1. Thread 类的方法:sleep(),yield()等Object 的方法:wait()和 notify()等
2.每个对象都有一个锁来控制同步访问。Synchronized 关键字可以和对象的锁交互,来
实现线程的同步。
sleep 方法没有释放锁,
wait 方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3.wait,notify 和 notifyAll 只能在同步控制方法或者同步控制块里面使用,而 sleep 可
以在任何地方使用
4.sleep 必须捕获异常,而 wait,notify 和 notifyAll 不需要捕获异常**
与线程同步以及线程调度相关的方法。
- wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁;
-
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要处理
InterruptedException 异常;
-
notify():唤醒一个处于等待状态的线程,当然在调用此方法的时候,并不能确切的唤醒某
一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且与优先级无关;
-
notityAll():唤醒所有处于等待状态的线程,该方法并不是将对象的锁给所有线程,而是让
它们竞争,只有获得锁的线程才能进入就绪状态;