天天看点

sleep()和 wait()有什么区别sleep()和 wait()有什么区别与线程同步以及线程调度相关的方法。

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():唤醒所有处于等待状态的线程,该方法并不是将对象的锁给所有线程,而是让

    它们竞争,只有获得锁的线程才能进入就绪状态;