温馨提示×

如何测试notifyall的效果

小樊
81
2024-07-04 09:28:24
栏目: 编程语言

要测试notifyAll()方法的效果,可以编写一个简单的多线程程序,然后使用wait()和notifyAll()方法来实现线程之间的通信。下面是一个示例代码:

public class NotifyAllExample {
    
    private static final Object lock = new Object();
    
    public static void main(String[] args) {
        Thread t1 = new Thread(new MyRunnable(), "Thread 1");
        Thread t2 = new Thread(new MyRunnable(), "Thread 2");
        Thread t3 = new Thread(new MyRunnable(), "Thread 3");
        
        t1.start();
        t2.start();
        t3.start();
        
        try {
            Thread.sleep(1000); // 等待一段时间确保所有线程都处于等待状态
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        synchronized(lock) {
            lock.notifyAll(); // 唤醒所有等待在lock对象上的线程
        }
    }
    
    static class MyRunnable implements Runnable {
        @Override
        public void run() {
            synchronized(lock) {
                try {
                    System.out.println(Thread.currentThread().getName() + " is waiting");
                    lock.wait(); // 等待被唤醒
                    System.out.println(Thread.currentThread().getName() + " is awake");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

在上面的示例中,创建了3个线程并启动它们,然后让主线程等待一段时间后使用notifyAll()方法来唤醒所有等待在lock对象上的线程。每个线程在运行时会首先输出自己的名字并进入等待状态,当主线程调用notifyAll()方法后,所有线程会被唤醒并输出“is awake”。

运行这段代码可以看到多个线程被同时唤醒的效果,从而测试notifyAll()方法的效果。

0