@Override
    public void run() {
        // First place an order:
        for(Course course : Course.values()) {
            Food food = course.randomSelection();
            table.placeOrder(this, food);
            ++nPlates;
        }
        try {
            barrier.await();
        } catch(InterruptedException ie) {
            print(this + " interrupted while ordering meal");
            return;
        } catch(BrokenBarrierException e) {
            throw new RuntimeException(e);
        }
        // Now wait for each ordered plate:
        for(int i = 0; i < nPlates; i++)
            try {
                // Blocks until course has been delivered:
                print(this + "eating " + placeSetting.take());
            } catch(InterruptedException e) {
                print(this + "waiting for meal interrupted");
                return;
            }
        print(this + "finished meal, leaving");
    }