关于#java#的问题,如何解决?

课本上课后一题习题。
不会做了,请大家 给个例子参考一下。

创建两个Thread子类,第一个用run()方法用于最开始的启动,并捕获第二个Thread对象的引用,然后调用wait()。第二个类的run()方法几秒后为第一个线程调用notifAll(),使第一个线程打印消息

在这个例子中,我创建了两个Thread子类。第一个类被用于最开始的启动,它捕获第二个Thread对象的引用,并在synchronized代码块中等待第二个线程的通知。第二个类的run()方法等待了5秒后,执行了notifyAll()方法,唤醒了第一个线程。在第一个线程中,等待接收到第二个线程的通知后,输出了"First thread resumed and received notification from second thread"。最后,在main函数中,我启动了两个线程,并等待它们执行完。

class FirstThread extends Thread {
    private SecondThread secondThread;
    
    public FirstThread(SecondThread secondThread) {
        this.secondThread = secondThread;
    }
    
    public void run() {
        System.out.println("First thread started");
        System.out.println("Wait for 5 seconds");
        
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        System.out.println("First thread is waiting for notification from second thread");
        
        synchronized (secondThread) {
            try {
                secondThread.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        
        System.out.println("First thread resumed and received notification from second thread");
    }
}

class SecondThread extends Thread {
    public void run() {
        System.out.println("Second thread started");
        System.out.println("Wait for 5 seconds");
        
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        System.out.println("Second thread is sending notification to first thread");
        
        synchronized (this) {
            notifyAll();
        }
    }
}

public class Main {
    public static void main(String[] args) {
        SecondThread secondThread = new SecondThread();
        FirstThread firstThread = new FirstThread(secondThread);
        
        secondThread.start();
        firstThread.start();
        
        try {
            secondThread.join();
            firstThread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

如果以上回答对您有所帮助,点击一下采纳该答案~谢谢