@Override
	public boolean awaitTermination(final long timeout, final TimeUnit unit)
		throws InterruptedException
	{
		long remainingNanos = unit.toNanos(timeout);

		_lock.lock();
		try {
			while (!isFinished()) {
				if (remainingNanos <= 0L) {
					return false;
				}
				remainingNanos = _terminated.awaitNanos(remainingNanos);
			}

			return true;
		} finally {
			_lock.unlock();
		}
	}
Blocks until all tasks have completed execution after a shutdown request,
or the timeout occurs, or the current thread is interrupted, whichever
happens first.

@param timeout the maximum time to wait
@param unit the time unit of the timeout argument
@return {@code true} if this executor terminated and
        {@code false} if the timeout elapsed before termination
@throws InterruptedException if interrupted while waiting
jenetics.incubator/src/main/java/io/jenetics/incubator/util/TaskCompletion.java