在多線程編程中,線程間通信是一個(gè)重要的問題。Java 5 引入了一種新的機(jī)制,即 await 和 signal 方法,可以解決線程間通信的問題。
await 方法是在 Lock 對(duì)象上調(diào)用的,它使線程進(jìn)入等待狀態(tài),直到其他線程調(diào)用相同的 Lock 對(duì)象的 signal 方法或 signalAll 方法,喚醒它。
// 線程1 lock.lock(); try { while (!condition) { condition.await(); // 等待線程2修改 condition } // 其他操作 } finally { lock.unlock(); } // 線程2 lock.lock(); try { condition.signal(); // 其他操作 } finally { lock.unlock(); }
上面的代碼演示了 await 方法的使用,它使線程1等待,直到線程2修改 condition 的狀態(tài)。線程2調(diào)用 signal 方法后,線程1被喚醒,繼續(xù)執(zhí)行。
與之相似的方法還有 awaitUninterruptibly 和 awaitNanos 等,可以根據(jù)具體情況選擇使用。
線程間通信是多線程編程中常見的問題,await 和 signal 方法提供了一種簡(jiǎn)單、可靠的解決方案,是值得使用的機(jī)制。