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