Waiting for Conditions
The WaitFor class can be used to periodically check if a Condition is satisfied, sleeping for a short period if it has not before checking again. The methods available are
waitOrTimeoutwaitUntil
The waitOrTimeout will wait until the condition is satisfied or timeout after a specified Timeout. The waitUntil waits until a given timeout without checking against any condition. Both methods can be interrupted and so throw an InterruptedException. The sleep period between condition checks is defaulted but since version 1.1 can be overridden (by passing in a implementation of Sleeper such as ThreadSleeper) .
For example, waiting for a thread to move into a waiting state can be implemented like this;
1 2 3 4 5 6 7 | |
Where WaitFor.waitOrTimeout has been statically imported and Timeout.timeout is a static constructor for a Timeout object.
A call to waitOrTimeout will also throw a TimeoutException if it times out. However, you can call an overloaded version which doesn't throw the exception but instead executes some behaviour you pass in via a Callable instance. For example,
1 2 3 4 5 6 7 8 | |