wait()
和 notify()
是 Java 中两个重要的方法,它们主要用于多线程编程中的线程间通信。这两个方法都定义在 Object
类中,因此所有的 Java 对象都可以使用它们。它们的主要区别在于它们的作用和用法。
-
wait()
:- 当一个线程调用某个对象的
wait()
方法时,该线程会释放该对象的所有锁,然后进入等待状态,直到其他线程调用同一个对象的notify()
或notifyAll()
方法唤醒它。 wait()
方法通常与synchronized
关键字一起使用,以确保线程安全。wait()
方法会抛出InterruptedException
异常,因此调用者需要处理这个异常。wait()
方法只能被调用一次,否则会抛出IllegalMonitorStateException
异常。
- 当一个线程调用某个对象的
-
notify()
:- 当一个线程调用某个对象的
notify()
方法时,它会唤醒在该对象上等待的单个线程。具体唤醒哪个线程是不确定的,取决于操作系统的线程调度策略。 notify()
方法通常与synchronized
关键字一起使用,以确保线程安全。notify()
方法不会抛出异常。- 如果调用
notify()
方法时没有线程在等待,那么没有任何效果。
- 当一个线程调用某个对象的
总结一下,wait()
和 notify()
都是用于线程间通信的方法,它们的主要区别在于:
wait()
方法使当前线程等待,并释放对象锁;而notify()
方法唤醒等待在当前对象上的一个线程。wait()
方法会抛出InterruptedException
异常;而notify()
方法不会抛出异常。wait()
方法只能被调用一次;而notify()
方法可以多次调用。