在Java中,wait()
方法可以與synchronized
關(guān)鍵字和Object.notify()
或Object.notifyAll()
方法一起使用,以實(shí)現(xiàn)線程間的通信。當(dāng)調(diào)用wait()
方法時(shí),線程會(huì)釋放其占有的對(duì)象鎖并進(jìn)入等待狀態(tài),直到其他線程調(diào)用同一對(duì)象的notify()
或notifyAll()
方法喚醒它。
要設(shè)置wait()
方法的超時(shí)時(shí)間,可以使用Thread.sleep()
方法。以下是一個(gè)示例:
try {
// 1. 獲取對(duì)象鎖
synchronized (lock) {
// 2. 檢查條件是否滿足
while (!condition) {
// 3. 如果條件不滿足,則等待一段時(shí)間(單位:毫秒)
lock.wait(timeout);
}
// 4. 條件滿足,執(zhí)行后續(xù)操作
}
} catch (InterruptedException e) {
// 處理異常
}
在這個(gè)示例中,lock
是用于同步的對(duì)象,condition
是等待的條件,timeout
是等待的超時(shí)時(shí)間(以毫秒為單位)。如果在timeout
毫秒內(nèi)條件沒(méi)有滿足,線程將繼續(xù)執(zhí)行后續(xù)操作。注意,當(dāng)線程被喚醒后,還需要重新獲取對(duì)象鎖才能繼續(xù)執(zhí)行。