• 多线程编程中的sleep 和 wait 方法有什么区别?
  • 发布于 2个月前
  • 411 热度
    0 评论
sleep 方法和 wait 方法都是用来将线程进入休眠状态的,并且 sleep 和 wait 方法都可以响应 interrupt 中断,也就是线程在休眠的过程中,如果收到中断信号,都可以进行响应并中断,且都可以抛出 InterruptedException 异常,那 sleep 和 wait 有什么区别呢?

区别一:语法使用不同
wait 方法必须配合 synchronized 一起使用,不然在运行时就会抛出 IllegalMonitorStateException 的异常,而 sleep 可以单独使用,无需配合 synchronized 一起使用。

区别二:所属类不同
wait 方法属于 Object 类的方法,而 sleep 属于 Thread 类的方法,

区别三:唤醒方式不同
sleep 方法必须要传递一个超时时间的参数,且过了超时时间之后,线程会自动唤醒。而 wait 方法可以不传递任何参数,不传递任何参数时表示永久休眠,直到另一个线程调用了 notify 或 notifyAll 之后,休眠的线程才能被唤醒。也就是说 sleep 方法具有主动唤醒功能,而不传递任何参数的 wait 方法只能被动的被唤醒。

区别四:释放锁资源不同
wait 方法会主动的释放锁,而 sleep 方法则不会。
用户评论