Возьмите пример Pausing a Thread. Если я использую notifyAll
вместо того, чтобы уведомлять, есть ли побочный эффект, и это необходимо?Возобновление потока с помощью notifyAll
ответ
В этом примере это не будет иметь никакого значения, потому что есть только 1 поток ожидания.
Разница между notify
и notifyAll
заключается в том, что последний разбудит всех официантов, а не только один.
Другое дело отметить, что с notify() у вас нет контроля над тем, что поток проснулся, это произвольный выбор. Поэтому, если вам нужен приоритет смещения вообще, вам нужно будет искать более продвинутую реализацию в java.util.concurrent. – berry120
Использование уведомления. В отличие от уведомлений важно, если на объекте может быть несколько сторон. Если только один поток когда-либо ждет, тогда нет никакой разницы между вызовом notify vs notifyAll.
В «Effective Java» пункта 69, Блох предлагает «всегда использовать notifyAll».
Создать новый runnable. В методе запуска «start» countdownlatch ожидает и не позволит выполнить выполнение, если оно не будет выпущено с использованием обратного отсчета вызовов на этой защелке в течение предопределенного времени. В этом случае 1. (так как старт передается 1 как совпадающий нет)
// Пересмотренный ответ. // Прогонный класс.
public class WorkerThread implements Runnable
{
CountDownLatch start;
CountDownLatch end;
String name;
WorkerThread(CountDownLatch startLatch, CountDownLatch stopLatch)
{
this.start = startLatch;
this.end = stopLatch;
}
public void run()
{
try
{
start.await();
} catch (InterruptedException ex)
{
ex.printStackTrace();
}
System.out.println("Will run when start is released ");
end.countDown();
}
}
// Это метод точки входа, который выполняет рабочий поток.
public void initiateProcess (final int count) {
CountDownLatch start = new CountDownLatch(1);
CountDownLatch stop = new CountDownLatch(count);
for (int i = 0; i < count; i++)
{
new Thread(new WorkerThread(start, stop))
.start();
}
System.out.println("Go");
// This is where start latch is released. Now worked thread can complete its function.
start.countDown();
try
{
// Stop will wait until stop latch is countdowned to zero from count param. (see count param)
stop.await();
} catch (InterruptedException ex)
{
ex.printStackTrace();
}
System.out.println("Finished");
}
Он не показывает точно, как вы приостанавливаете и возобновляете поток. –
Хм ... Вы, вероятно, правы, я спешил опубликовать небольшой образец защелки. Я пересмотрел ответ. –
Скопируйте этот класс и запустите его в режиме отладчика. Это поможет лучше понять countdownlatch. –
- 1. Пауза и возобновление потока
- 2. Возобновление воспроизведения последнего потока AVPlayer
- 3. Безопасное приостановление и возобновление потока
- 4. Направленный notifyAll()
- 5. Возобновление потока и передача объекта в Java
- 6. Клонирование Java «Breakout»: приостановка и возобновление потока
- 7. Threads notifyAll()
- 8. Ошибка многопоточности с notifyAll()
- 9. Что происходит с notifyAll()?
- 10. Несколько потоков с notifyAll()
- 11. notifyAll() throws IllegalMonitorStateException
- 12. Как использовать wait() и notifyAll() для запуска потока по одному?
- 13. NotifyAll, IllegalMonitorStateException
- 14. Приостановка и возобновление загрузки с помощью дооснащения
- 15. Возобновление ожидания асинхронного скрипта с помощью receiveMessage
- 16. Что случилось с моим notifyAll()?
- 17. IllegalMonitorStateException с ArrayList NotifyAll() Wait()
- 18. Приостановка и возобновление потока в SurfaceView в Android
- 19. notifyAll не пробуждает нить
- 20. wait() не прерывается notifyAll()
- 21. Правильная синхронизация потоков Java с помощью wait/notifyAll?
- 22. Правильное использование Grand Central Dispatch - запуск, приостановка, возобновление, отмена потока?
- 23. Пауза/возобновление потока вместо запуска/остановки в C#
- 24. Почему notifyAll() не работает?
- 25. многопоточная пауза и возобновление
- 26. GWT и notifyAll() (java.lang.Object)
- 27. Swing wait()/notifyAll()
- 28. Java wait/notifyAll
- 29. notifyAll() не работает
- 30. Сложность операции notifyAll
Я знаю, что я отвлекаюсь, но лучше использовать утилиты параллелизма, чтобы ждать и уведомлять. –
@ doc_180, а затем покажите мне общеизвестный способ приостановить и возобновить поток, используя утилиты параллелизма. –
Вы будете делать хуже, чем читать книгу Дуга Ли о параллелизме. В любом случае здесь идет простой исполнитель и образец защелки. Образец кода в отдельном ответе ниже. –