wait()方法的作用和用法
wait()方法是一个用于线程同步的重要方法。它的主要作用是暂停当前线程的执行,直到某个特定条件发生或者其他线程完成某项任务。
作用:
wait()方法的主要作用是让线程进入等待状态,直到满足某个条件。当调用wait()方法时,当前线程会释放锁并进入等待队列,直至其他线程调用notify()或notifyAll()方法唤醒该线程。
通过等待-通知机制,wait()方法可以实现线程间的协调和通信。例如,一个线程在等待另一个线程计算完毕后才能继续执行,就可以使用wait()方法。
用法:
wait()方法的用法可以归纳为以下几个步骤:
- 在需要等待的代码块中调用wait()方法。
- 使用synchronized关键字来获取对象的监视器锁,以确保多个线程访问同步代码块的顺序性。
- 在调用wait()方法后,当前线程进入等待状态并释放锁,直到其他线程调用notify()或notifyAll()方法。
- 当被唤醒的线程再次获得锁时,从wait()方法调用处开始继续执行。
下面是一个简单的示例代码:
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()方法,可以避免多线程程序中的竞争条件和死锁问题,提高程序的可靠性和效率。


