К тому времени, когда ожидание возвращается (включая случай, когда он генерирует InterruptedException), поток должен иметь монитор , иначе он не может быть выполнен в этом синхронизированном методе. Поток должен получить монитор, прежде чем он сможет покинуть метод ожидания. Затем, как только он выходит из метода ожидания, у потока появляется монитор, и он освобождает его, когда поток покидает метод.
Здесь лучше бросить InterruptedException вызывающей стороне, а не есть ее. Ваша цель здесь состоит в том, чтобы быстро выйти и сообщить вызывающему абоненту, что произошло прерывание, чтобы оно могло обернуться. Еда здесь также, кажется, означает, что вы снова возвращаетесь к циклу while. Прерывание используется java.util.concurrent для реализации отмены, особенно если вы используете инструменты java.util.concurrent, имеет смысл написать код, совместимый с ними.