在Java中,線程等待的正確實現方法是使用Object
類的wait()
和notify()
或notifyAll()
方法。這些方法在多線程編程中常用于線程間的同步和通信。
下面是一個簡單的示例,演示了如何使用wait()
和notify()
方法來實現線程等待:
public class ThreadWaitExample {
public static void main(String[] args) {
final Object lock = new Object();
Thread t1 = new Thread(() -> {
synchronized (lock) {
try {
System.out.println("Thread 1 is waiting...");
lock.wait();
System.out.println("Thread 1 is notified and resumed.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread t2 = new Thread(() -> {
synchronized (lock) {
System.out.println("Thread 2 is notifying...");
lock.notify();
}
});
t1.start();
t2.start();
}
}
在上面的示例中,線程t1
調用lock.wait()
方法使自己進入等待狀態,而線程t2
在同步塊中調用lock.notify()
方法通知t1
線程繼續執行。這樣,線程t1
就會從等待狀態被喚醒并繼續執行。
需要注意的是,wait()
、notify()
和notifyAll()
方法必須在同步塊中被調用,并且必須是用相同的對象作為鎖。否則將會拋出IllegalMonitorStateException
異常。