Что на самом деле означает Wait () в Java? Я подожду или ты подождешь?

1

Как я понимаю, если я нить, тогда:

  • Когда я вызываю notifyAll() notify()/notifyAll() это означает, что я посылаю сигнал другому потоку, который ждет этого монитора объекта. Я прав?

  • Но что означает wait()?

    Я посылаю сигнал в другой поток, чтобы ждать, чтобы я мог завершить свою работу над ним?
    Или
    Я объявляю, что буду ждать, Ты делаешь свою работу и рассказываешь мне, когда закончишь.

У меня есть небольшая концепция о потоках

  • 2
    Вы ждете, чтобы некоторые уведомили вас о чем-то ...
  • 1
    Потратьте некоторое время, чтобы прочитать Урок: параллелизм и не зацикливайтесь на том, чтобы попробовать какой-нибудь тест ...
Показать ещё 3 комментария
Теги:
multithreading
wait
notify

2 ответа

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

Нет, это означает, что вы хотите подождать уведомления.

В соответствии с документами Java (мой акцент):

Заставляет текущий поток ждать, пока другой поток не вызовет метод notify() или метод notifyAll() для этого объекта.

  • 0
    Тогда у меня есть небольшая путаница. Предположим, какой-то один вызов уведомляет об объекте, и я не жду этого монитора конкретного объекта, но я работаю с этим объектом. Это действительная ситуация? Если да, то это повлияет на поведение?
  • 0
    если вы хотите, я могу обновить свой вопрос с этой частью.
Показать ещё 6 комментариев
1

Это означает: "Я объявляю, что буду ждать, Ты делаешь свою работу и рассказывай мне, когда закончишь".

Документ говорит,

Заставляет текущий поток ждать, пока другой поток не вызовет метод notify() или метод notifyAll() для этого объекта. Другими словами, этот метод ведет себя точно так, как если бы он просто выполнял ожидание вызова (0). Текущий поток должен владеть этим объектом монитора. Нить освобождает владельца этого монитора и ждет, пока другой поток не сообщит потокам, ожидающим на этом объектном мониторе, просыпаться либо через вызов метода уведомления, либо метод notifyAll. Затем поток ожидает, пока он не сможет повторно получить право собственности на монитор и возобновит выполнение.

См. Эту ссылку

  • 0
    wait() ничего не объявляет . Это просто ждет.

Ещё вопросы

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