Уведомление не работает .. вечно жду нить Java

1

Привет, я новичок в программировании, и я пытаюсь сделать простую проблему с производителем-потребителем... но, к сожалению, мой поток ждет навсегда. Не знаю, не работает ли какие-то идеи? :/

public synchronized void order() throws Exception{

    System.out.println("User "+name+" requests:\n"+"cherries=" + cherries);

    while(checkValues()==true){
        System.out.println(name+"  waiting");
        wait(); 
    } 
    notify();
    Update();
    store.toString();

    System.out.println(name+" gets resources ");
    Thread.sleep(5000);
 }
Теги:
multithreading
wait
notify
forever

1 ответ

5
Лучший ответ

Верьте или нет... wait() и notify() работают нормально.

Проблема в том, что вы не используете их правильно.

while(checkValues()==true){
    System.out.println(name+"  waiting");
    wait(); 
}
notify();

Это будет ждать, пока какой-либо другой поток не уведомит об this экземпляре для вызова метода. Это не может быть notify(); вызовите после цикла... ", потому что вы не можете добраться туда, пока не получите уведомление.

Теперь возможно, что некоторые другие потоки могут делать это notify(), но вы не показали нам код, который делает это. И текущий код не указывает на это. И симптомы, которые вы описываете, указывают именно так.


К сожалению, я не могу понять, что на самом деле пытается сделать ваш код. Это действительно не имеет большого значения для меня. Поэтому я не могу предложить, как это исправить.

Лучшее, что я могу сделать, это предложить вам ознакомиться с некоторыми примерами правильного использования функции wait/notify. Например:

  • 0
    «Вы не можете попасть туда, пока не получите уведомление». сделал меня лол. +1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню