Java Object notifyAll()唤醒所有等待线程的方法

Java Object notifyAll()方法可以用来唤醒所有等待线程,它是Object类中的一个公共方法。它的作用是当一个对象上存在多个等待线程时,可以通过调用notifyAll()方法来唤醒所有等待线程,使得它们可以继续执行。

使用方法

public synchronized void notifyAll() {
    notifyCount = 0;
    notifyAll();
}

以上代码是使用notifyAll()方法的基本格式,它需要在synchronized块中使用,notifyCount变量表示当前有多少线程在等待,当notifyCount等于0时,表示没有线程在等待,就可以调用notifyAll()方法来唤醒所有等待线程。

Java还提供了一个wait()方法,它可以用来让线程等待一段时间,当等待时间到达后,它会被唤醒,继续执行。

使用示例

public class Test {
    public static void main(String[] args) {
        Object obj = new Object();
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (obj) {
                    System.out.println("Thread 1 is waiting...");
                    try {
                        obj.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Thread 1 is running...");
                }
            }
        });
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (obj) {
                    System.out.println("Thread 2 is waiting...");
                    try {
                        obj.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Thread 2 is running...");
                }
            }
        });
        t1.start();
        t2.start();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        synchronized (obj) {
            obj.notifyAll();
        }
    }
}

以上代码演示了如何使用notifyAll()方法来唤醒多个等待线程。创建了一个Object对象,创建了两个线程t1和t2,它们都在等待Object对象的notifyAll()方法的调用。程序休眠了2秒,调用了Object对象的notifyAll()方法,唤醒了所有等待的线程,使它们可以继续执行。

Java Object notifyAll()方法可以用来唤醒所有等待线程,它需要在synchronized块中使用,可以使用wait()方法来让线程等待一段时间,当等待时间到达后,它会被唤醒,继续执行。

本文链接:http://task.lmcjl.com/news/6765.html

展开阅读全文