Задачу решил правильно, но ход программы понял не до конца. когда класс Producer вызывает метод put и передает в него число, в самом методе put (класса TransferObject) ведь первые строчки это пока переменная isValuePresent false метод ждет, а кто же её тогда изменит на true что бы она перестала ждать? или порядок выполнения метода для JVM не по порядку, описанному в методе? public synchronized void put(int value) throws InterruptedException { while (isValuePresent) { wait(); } this.value = value; isValuePresent = true; notifyAll(); System.out.println("Put: " + value); }