Почему метод ожидания объекта потока не нуждается в методе уведомления, чтобы проснуться? - PullRequest
0 голосов
/ 20 июня 2019

Когда я вызываю метод wait () для объекта потока, ожидающий поток будет пробужден, когда синхронизированный поток завершит работу, почему поведение объекта потока отличается от обычного объекта, где wait ()?

Thread thread1 = new Thread(()-> {
            System.out.println("thread 1 start");
            try {
            Thread.sleep(3000);
            System.out.println("thread over");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }});
thread1.start();

synchronized (thread1) {
            try {
                thread1.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("main thread wake up");

Я ожидал, что основной поток не проснется через 3 с, но не.

1 Ответ

5 голосов
/ 20 июня 2019

Javadoc говорит:

Когда поток завершается, вызывается метод this.notifyAll. Рекомендуется, чтобы приложения не использовали wait, notify или notifyAll для экземпляров Thread.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...