- synchronized (lockObject) {
- while (conditionIsNotMet) {
- try {
- lockObject.wait(); // 当条件未满足时,线程挂起
- } catch (InterruptedException e) {
- // 处理异常
- }
- }
- // 执行需要同步的操作
- }
在上述示例中,线程在获取了lockObject的锁之后,使用wait()方法来将自己挂起,直到条件满足或者其他线程调用notify()或notifyAll()来唤醒它。
notify()的使用- synchronized (lockObject) {
- // 修改条件
- lockObject.notify(); // 唤醒等待该对象锁的一个线程
- }
在上述示例中,当某个线程在获得了lockObject的锁之后,通过调用notify()方法来唤醒一个正在等待lockObject锁的线程,以便该线程可以继续执行。
需要注意的是,调用wait()和notify()方法之前必须获得对象锁,也就是必须在synchronized块中调用。另外,wait()和notify()必须作用于同一个对象锁上。
上述是简单的示例,实际使用中还需要结合具体的业务场景和线程通信的逻辑来灵活使用wait()和notify()。另外,要注意处理中断异常InterruptedException,以及在使用wait()方法的时候应该总是放在循环中,并且检查条件是否满足。