在Java中,線程等待的最佳實(shí)踐是使用Object
類的wait()
和notify()
方法或者CountDownLatch
類來(lái)實(shí)現(xiàn)線程之間的同步和通信。
wait()
和notify()
方法:
wait()
方法將該線程置于等待狀態(tài),直到其他線程調(diào)用notify()
或notifyAll()
方法來(lái)喚醒等待的線程。synchronized
關(guān)鍵字來(lái)對(duì)共享資源進(jìn)行同步,確保線程間的安全訪問(wèn)。示例代碼:
public class WaitNotifyExample {
private Object lock = new Object();
private boolean condition = false;
public void waitForCondition() throws InterruptedException {
synchronized (lock) {
while (!condition) {
lock.wait();
}
}
}
public void signalCondition() {
synchronized (lock) {
condition = true;
lock.notify();
}
}
}
CountDownLatch
類:
CountDownLatch
是一種同步工具類,可以讓一個(gè)或多個(gè)線程等待其他線程執(zhí)行完畢。CountDownLatch
的await()
方法時(shí),會(huì)被阻塞,直到CountDownLatch
的計(jì)數(shù)器減為0才會(huì)繼續(xù)執(zhí)行。CountDownLatch
的countDown()
方法來(lái)減少計(jì)數(shù)器的值。示例代碼:
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
private CountDownLatch latch = new CountDownLatch(1);
public void waitForCondition() throws InterruptedException {
latch.await();
}
public void signalCondition() {
latch.countDown();
}
}
總的來(lái)說(shuō),使用wait()
和notify()
方法或者CountDownLatch
類可以很好地實(shí)現(xiàn)線程之間的等待和通信,同時(shí)確保線程安全和避免死鎖等問(wèn)題。在具體應(yīng)用中,根據(jù)場(chǎng)景選擇合適的方式來(lái)實(shí)現(xiàn)線程的等待是最佳實(shí)踐。