阅读量:3
要测试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()方法的效果。