江明涛的博客
Java notify 怎么使用?
Java notify 怎么使用?

Java notify 怎么使用?

在Java多线程编程中,经常会使用到wait和notify方法来实现线程之间的协作和同步。本篇文章将介绍Java中的notify方法以及它的使用方法。

在Java中,notify方法是Object类中的一个方法,它用于唤醒处于wait状态的线程。当一个线程调用某个对象的notify方法时,它会将该对象的等待队列中的一个线程唤醒,使其从wait状态变为可运行状态。

使用notify方法需要满足以下条件:

  1. notify方法必须在同步代码块中调用,即必须获取对象的锁才能调用notify方法。
  2. notify方法只会唤醒等待队列中的一个线程,具体唤醒哪个线程是不确定的。
  3. 如果有多个线程处于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方法,可以有效控制线程的执行顺序和状态。

参考资料: