Ну задачу я решил только не понял почему переменные continueWorking в классах Waiter и Cook не сделаны как volatile? ведь они могут быть закешированы нитями