В вашем коде вы вызываете wait
в run
методе переопределения вашего потока.
К сожалению, никто не вызывает notify
метод для объекта, который ожидает.
Этопотому что в вашем main
вы переворачивали свои X
и YThread
в общий Thread
объект.
Из-за этого вызов thread2.notify()
отправляет сигнал не тому объекту (не YThread, который заблокирован, а объект-оболочка).
Измените объявление на
Thread thread1 = new XThread();
Thread thread2 = new YThread();
Ваша программа все еще будет блокироваться (потому что вы не notifying
потоков достаточно много раз), но, по крайней мере, это может пойти дальше.Обратите внимание may
в моем последнем предложении.Это связано с тем, что notify
в thread2 может быть отправлен до того, как поток вызовет свой первый wait
.