Java. Многопоточность. Методы wait и notify. Блокирующая очередь и Worker Thread.

preview_player
Показать описание
Продолжаем разбирать элементарную многопоточность в Java. Разбираем как работают методы wait и notify. Как с их помощью построить блокирующую очередь. Как на основе очереди создать Worker Thread.
Исходники:

Поддержать канал💰:

#ArhiTutorialsJava #ityoutubersru
Рекомендации по теме
Комментарии
Автор

на 2:22 неточность. Нить, вызывая метод wait, НЕ блокируется(нить переходит в состояние BLOCKED), а ОЖИДАЕТ(нить переходит в состояние WAITING). После того как другая нить вызовет метод notify, ожидающая нить перейдет в состояние RUNNABLE и попытается захватить монитор. В случае если монитор успела захватить другая нить, то наша нить заблокируется(состояние BLOCKED)

PoMaH_B
Автор

Вау. Это талант. Вы объяснили за 16 минут (+прошлое видео) то, что я не смог понять читая различные статьи несколько часов.

ДимаДербин-сф
Автор

@arhitutorials, Спасибо, добрый человек) Вчера попалась такая задача на собесе, только с множеством продюсеров и консьюмеров. Но легко разрешилось добавлением того же бесконечного while в метод put и использованием notifyAll вместо notify

algsorokin
Автор

Не уроки, а песня прямо какая-то))
Спасибо за ваш труд!

Chekist
Автор

Спасибо большое! Повторение — мать учения!

p.polunin
Автор

Прекрасний приклад і подача матеріалу. Дякую за корисне відео

druzzyaka
Автор

Спасибо, брат. Супер полезные видосы. Удачи в прокачке канала.

ИльяВологдин-би
Автор

Отлично объясняешь! Спокойно, просто и понятно. Еще бы рассказал про отличие notify() от notifyAll()

Aticinsane
Автор

Спасибо, теперь мне понятнее как устроен handlerThread и его очередь)

namefamily
Автор

Отличное видео! Буду знать альтернативу. Даже не задумывался об этом. По дефолту threadpoolexecutor для этих целей всегда юзал) Теперь буду знать альтернативу на один поток) Спасибо!

simplechannel
Автор

remove(index) елемента коллекции возвращает удалённый элемент))

mxxmx
Автор

Я правильно понимаю, что если для worker установить setDaemon(true), то main завершит свою работу после того как задачи закончатся?

JustDux
Автор

Я не могу сообразить, а когда происходит выполнение метода start()?
Thread t1 = new Thread(printA());
Thread t2 = new Thread(printB());
Thread t3 = new Thread(printC());

for (int i = 0; i < 5; i++) {
queue.put(t1);
queue.put(t2);
queue.put(t3);
}
Спасибо Сергей за Ваши уроки!

maniana
Автор

Если после wait блокировка снята, то получается что доступ к tasks становится не защищенным с точки зрения многопоточности?

stivstivsti
Автор

Спасибо! Очень доступно и в то же время без воды🔥 Не плохо было бы добавить кнопочку "спонсировать"...

Один вопрос: я так понимаю здесь реализован producer - consumer. Всегда ли будет выполняться порядок или могут быть ситуации, когда сначало будет несколько раз подряд добавлено, а потом несколько раз взято?

andjusticeforall
Автор

Ааааа, как обидно, когда нихера не понял как это работает.

DedVpihto