void drain() {
        lock.lock();
        try {
            LOG.finest("Waiting while draining...");
            while (isWorking() && !exchanges.isEmpty()) {
                try {
                    notFull.await();
                } catch (InterruptedException intx) {
                    LOG.log(Level.FINEST, INTERRUPTED, intx);
                }
            }
            LOG.finest("Drained");
        } finally {
            lock.unlock();
        }
    }