一、Condition是什么?有什么用?
Tip: 本文源码基于JDK8
我们知道 wait()、notify()是和synchronized关键字配合使用的。如果使用了显示锁Lock,就不能用了,所以Condition应运而生。
Condition是一个接口,主要功能就是提供了与 wait()、notify()一样的等待/唤醒功能。
全部接口如下:
- await()
线程在调用condition.await()后处于await状态,此时调用thread.interrupt()会报错 - awaitUninterruptibly()
但是使用condition.awaitUninterruptibly()后,调用thread.interrupt()则不会报错 - awaitNanos(long nanosTimeout)
等待到nanosTimeout纳秒 - await(long time, TimeUnit unit)
等待到单位时间 - awaitUntil(Date deadline)
等待到特定日期 - signal()
唤醒一个等待在condition上的线程 - signalAll()
醒所有等待在condition上的线程