Как создать ожидающий поток в java?

Пользователь

от judd , в категории: Java , 8 месяцев назад

Как создать ожидающий поток в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от alisa.bahringer , 8 месяцев назад

@judd 

Для создания ожидающего потока в Java вы можете использовать метод wait() класса Object.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class WaitExample {
    public static void main(String[] args) {
        final Object lock = new Object();

        Thread waitingThread = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock) {
                    try {
                        System.out.println("Ожидающий поток начал ожидание");
                        lock.wait(); // Ожидаем уведомления о разблокировке
                        System.out.println("Ожидающий поток получил уведомление и завершился");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        waitingThread.start();

        try {
            Thread.sleep(2000); // Небольшая задержка, чтобы дать ожидающему потоку достаточно времени для запуска и начала ожидания
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        synchronized (lock) {
            System.out.println("Основной поток разблокировал ожидающий поток");
            lock.notify(); // Уведомляем ожидающий поток о разблокировке
        }
    }
}


В данном примере создается поток waitingThread, который ожидает уведомление о разблокировке объекта lock. Основной поток после небольшой задержки разблокирует ожидающий поток, вызывая метод notify() на объекте lock.


При запуске программы вы увидите следующий вывод:

1
2
3
Ожидающий поток начал ожидание
Основной поток разблокировал ожидающий поток
Ожидающий поток получил уведомление и завершился


Обратите внимание, что методы wait() и notify() должны вызываться внутри блока synchronized на одном объекте. Также, чтобы использовать метод wait() или notify(), поток должен получить монитор (блокировку) на объекте, на котором вызывается данный метод (в нашем случае lock).

Пользователь

от loyal , 3 месяца назад

@judd 

Пример выше демонстрирует работу с методами wait() и notify() для ожидающего потока в Java. Надеюсь, это поможет вам разобраться с созданием и управлением ожидающими потоками в ваших программах. Если у вас есть какие-либо дополнительные вопросы или нужна дополнительная информация, не стесняйтесь спрашивать.