The Condition interface has other versions of the await() method, which are as follows:
- await(long time, TimeUnit unit): Here, the thread will sleep until:
- It's interrupted
- Another thread calls the signal() or signalAll() methods in the condition
- The specified time passes
- The TimeUnit class is an enumeration with the following constants: DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, and SECONDS
- awaitUninterruptibly(): The thread will sleep until another thread calls the signal() or signalAll() methods, which can't be interrupted
- awaitUntil(Date date): The thread will sleep until:
- It's interrupted
- Another thread calls the signal() or signalAll() methods in the condition
- The specified date arrives
You can use conditions with the ReadLock and WriteLock locks of a read/write lock.