@Override
    public Object call() throws Exception {
        E item = null;
        while (!Thread.currentThread().isInterrupted()) {
            lock.lock();

            // wait while the queue is empty
            notEmpty.await();
            
            // new client came to the queue
            try {

                // get the client
                item = list.remove(0);
            } finally {
                lock.unlock();
            }

            // try the client to enter the room
            room.put(item);
        }

        return new Object();
    }