首页主机资讯如何测试notifyall的效果

如何测试notifyall的效果

时间2024-07-04 20:02:03发布访客分类主机资讯浏览533
导读:要测试notifyAll( 方法的效果,可以编写一个简单的多线程程序,然后使用wait( 和notifyAll( 方法来实现线程之间的通信。下面是一个示例代码: public class NotifyAllExample {...

要测试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()方法的效果。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何测试notifyall的效果
本文地址: https://pptw.com/jishu/686253.html
notifyall的常见错误及其修正方法 notifyall与synchronized关键字如何搭配

游客 回复需填写必要信息