wait()方法的作用和用法

wait()方法是一个用于线程同步的重要方法。它的主要作用是暂停当前线程的执行,直到某个特定条件发生或者其他线程完成某项任务。

作用:

wait()方法的主要作用是让线程进入等待状态,直到满足某个条件。当调用wait()方法时,当前线程会释放锁并进入等待队列,直至其他线程调用notify()或notifyAll()方法唤醒该线程。

通过等待-通知机制,wait()方法可以实现线程间的协调和通信。例如,一个线程在等待另一个线程计算完毕后才能继续执行,就可以使用wait()方法。

用法:

wait()方法的用法可以归纳为以下几个步骤:

  1. 在需要等待的代码块中调用wait()方法。
  2. 使用synchronized关键字来获取对象的监视器锁,以确保多个线程访问同步代码块的顺序性。
  3. 在调用wait()方法后,当前线程进入等待状态并释放锁,直到其他线程调用notify()或notifyAll()方法。
  4. 当被唤醒的线程再次获得锁时,从wait()方法调用处开始继续执行。

下面是一个简单的示例代码:

Text
public class WaitExample {
    public static void main(String[] args) {
        final Object lock = new Object();
        
        Thread thread1 = new Thread(new Runnable() {
            public void run() {
                synchronized (lock) {
                    try {
                        System.out.println("Thread 1: Waiting...");
                        lock.wait();
                        System.out.println("Thread 1: Woken up!");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        
        Thread thread2 = new Thread(new Runnable() {
            public void run() {
                synchronized (lock) {
                    try {
                        Thread.sleep(2000);
                        System.out.println("Thread 2: Waking up Thread 1...");
                        lock.notify();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        
        thread1.start();
        thread2.start();
    }
}

在上面的示例中,Thread 1在调用lock.wait()方法后进入等待状态,直到Thread 2调用lock.notify()方法唤醒它。这种方式可以确保线程的顺序执行,从而避免了竞争条件和死锁的发生。

总结来说,wait()方法是一种有效的线程同步机制,可用于实现线程间的协调和通信。通过合理使用wait()方法,可以避免多线程程序中的竞争条件和死锁问题,提高程序的可靠性和效率。