Цель связи потока - включить потоки отправлять сигналы друг другу. Кроме того, связь с потоком также может привести к тому, что поток ожидает сигналов из других потоков. Например, поток B может ждать сигналов из потока A, который может быть сигналом, который обрабатывал и завершенным потоком A.
WAIT () Метод
- прервать выполнение метода, заставьте этот поток подождать, временно отказавшись от права на использование ЦП и позвольте другим потокам использовать этот метод синхронизации
Метод уведомления ()
-Посайся в ожидании на определенном конце резьбы ожидания из -за использования этой синхронной партии
Метод notifyall ()
Разбудить все потоки в ожидании окончания ожидания из -за использования этого метода синхронизации
Когда использовать метод ожидания
Когда переменная используется в методе синхронизации, используемом потоком, и эта переменная должна быть изменена другими потоками для удовлетворения потребностей этого потока, тогда вы можете использовать метод wait () в методе синхронизации
Здесь я возьму пример в классе в качестве примера, чтобы кратко описать роль ожидания и уведомления
Мы уже знаем, что в многопользовании, таких как продажа билетов, порядок билетов, продаваемых в каждом окне, является случайным. Если у нас есть 2 окна, продавая билеты, предусмотрено, что 100 билетов должны быть проданы по очереди. После продажи одного билета в окне A следующий билет должен быть продан окном B. Как мы реализуем эту функцию?
Прежде всего, я думаю, что если утверждение может быть установлено. If (i%2 == 0), то потоки 1 запускаются, в противном случае потоки 2 запускаются, но прогоны потока 1 и потока 2 являются случайными, и его нельзя указать, чтобы определить, кто работает по размеру i.
Затем мы можем использовать wate () и уведомлять () в потоке
После того, как резьба 1 закончена, подождите мгновение, затем запускается поток 2, и после завершения потока 2, затем просыпайте резьбу 1, а затем снова
После того, как резьба 1 закончена, подождите мгновение, затем запускается поток 2, и после завершения потока 2, затем пробуйте резьбу 1
Таким образом, нить 1 и нить 2 можно запустить по очереди
Мы напечатали 10 чисел в качестве примеров для написания программы, и построили в общей сложности 2 класса MyPrint и MyPrintTest
Myprint.java
Общедоступный класс myprint реализует runnable {private int i = 0; @override public void run () {try {print ();} catch (прерывание Exception e) {// todo Автогенерированный блок захвата e.printstacktrace ();}} public void print () throw Прерывание Extexception {while (i <10) {System.out.println (thread.currentThread (). GetName ()+":"+i); i ++; notify (); try {wait ();} catch (прерываниеРезультаты показаны на рисунке
Вы можете увидеть, что поток 1 и поток 2 были реализованы, чтобы напечатать попеременно друг с другом.
Просто поймите процесс работы
while (i <10) {System.out.println (thread.currentThread (). getName ()+":"+i); i ++; notify (); try {wait ();} catch (прерывание Exception e) {e.printstacktrace ();}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}Когда я <10, распечатайте нить 1, а затем выполните пробуждение. Поскольку спереди нет нити, этот шаг не выполняется. Затем нить 1 ждет. После выполнения потока 2 просыпается предыдущий поток, то есть, нить 1, а затем напечатает нить 1,
Этот процесс продолжается до тех пор, пока петля не выходит
Суммировать
Выше приведено все содержание этой статьи о кратком обсуждении роли ожидания и уведомления в общении с потоком. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!