在Java多线程编程中,经常会使用到wait和notify方法来实现线程之间的协作和同步。本篇文章将介绍Java中的notify方法以及它的使用方法。
在Java中,notify方法是Object类中的一个方法,它用于唤醒处于wait状态的线程。当一个线程调用某个对象的notify方法时,它会将该对象的等待队列中的一个线程唤醒,使其从wait状态变为可运行状态。
使用notify方法需要满足以下条件:
- notify方法必须在同步代码块中调用,即必须获取对象的锁才能调用notify方法。
- notify方法只会唤醒等待队列中的一个线程,具体唤醒哪个线程是不确定的。
- 如果有多个线程处于wait状态,notify方法只会唤醒其中一个线程,其余线程仍然会保持wait状态。
下面是一个示例代码,演示了如何使用notify方法:
class MyThread implements Runnable {
private final Object lock;
public MyThread(Object lock) {
this.lock = lock;
}
public void run() {
synchronized (lock) {
System.out.println(Thread.currentThread().getName() + "获取到了锁");
try {
System.out.println(Thread.currentThread().getName() + "进入等待状态");
lock.wait();
System.out.println(Thread.currentThread().getName() + "被唤醒");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
Object lock = new Object();
Thread thread1 = new Thread(new MyThread(lock));
Thread thread2 = new Thread(new MyThread(lock));
thread1.start();
thread2.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock) {
System.out.println("唤醒一个线程");
lock.notify();
}
}
}
运行以上代码,可以看到两个线程会在lock对象上等待,并且只有一个线程会被唤醒。
在实际开发中,使用notify方法可以实现一些复杂的线程同步和协作逻辑。通过合理使用notify方法,可以有效控制线程的执行顺序和状态。
参考资料: