在Java中,可以使用wait()和notify()方法實現線程的等待和喚醒操作。這兩個方法必須在同步代碼塊中使用,通常與synchronized關鍵字一起使用。
下面是一個簡單的示例,演示如何使用wait()和notify()方法實現線程之間的通信:
public class WaitNotifyExample {
public static void main(String[] args) {
final Object lock = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock) {
System.out.println("Thread 1 is waiting...");
try {
lock.wait(); // 線程1等待
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 1 is notified!");
}
});
Thread t2 = new Thread(() -> {
synchronized(lock) {
System.out.println("Thread 2 is notifying...");
lock.notify(); // 喚醒線程1
}
});
t1.start();
t2.start();
}
}
在上面的示例中,線程1在同步代碼塊中調用wait()方法進行等待,線程2在同步代碼塊中調用notify()方法喚醒線程1。當線程2調用notify()方法時,線程1會被喚醒并繼續執行。
需要注意的是,wait()和notify()方法必須在同步代碼塊中使用,否則會拋出IllegalMonitorStateException異常。另外,wait()方法會釋放對象鎖,而notify()方法不會釋放對象鎖,所以在使用時要謹慎確保線程安全。