在Java中,線程等待通常與synchronized結合使用,以確保線程之間的同步和協調。使用synchronized可以確保多個線程對共享資源的訪問是安全的,而線程等待可以用來實現線程之間的協作和同步。
下面是一個示例,展示了如何在Java中使用線程等待與synchronized結合:
public class WaitAndNotifyExample {
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();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 1 has been notified");
}
});
Thread t2 = new Thread(() -> {
synchronized (lock) {
System.out.println("Thread 2 is notifying...");
lock.notify();
System.out.println("Thread 2 has notified");
}
});
t1.start();
t2.start();
}
}
在上面的示例中,我們創建了兩個線程t1和t2,t1在synchronized塊中調用wait()方法來等待,而t2在synchronized塊中調用notify()方法來通知等待的線程。通過結合使用synchronized和wait/notify,我們可以實現線程之間的協作和同步。
需要注意的是,調用wait()方法會讓線程釋放鎖并進入等待狀態,直到其他線程調用notify()方法來喚醒它。因此,在使用wait和notify時,必須在synchronized塊中調用它們以確保線程安全。