@Override
    public E get() throws InterruptedException {
        lock.lock();

        try {
            while (isEmpty()) {
                notEmpty.await();
            }

            E item = (E) chairs[oldest];
            chairs[oldest] = null;
            oldest = (1 + oldest) % chairs.length;

            notFull.signalAll();

            return item;

        } finally {
            lock.unlock();
        }
    }