在多线程编程中,线程间通信是一个重要的问题。Java 5 引入了一种新的机制,即 await 和 signal 方法,可以解决线程间通信的问题。
await 方法是在 Lock 对象上调用的,它使线程进入等待状态,直到其他线程调用相同的 Lock 对象的 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 的状态。线程2调用 signal 方法后,线程1被唤醒,继续执行。
与之相似的方法还有 awaitUninterruptibly 和 awaitNanos 等,可以根据具体情况选择使用。
线程间通信是多线程编程中常见的问题,await 和 signal 方法提供了一种简单、可靠的解决方案,是值得使用的机制。