Программирование на Java для начинающих #22 (Synchronized Code block)

preview_player
Показать описание
Это видео - новая часть моего нового цикла туториалов под названием "Программирование на Java для начинающих", в котором мы будем разбирать все аспекты Java программирования. В данном выпуске я расскажу о том, как использовать синхронизированный блок кода для устранения проблем с синхронизацией потоков.
-------------------------------------------------------------------------

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

Эх, актуально по сей день! Спс за разъяснения! Таких подробностей сейчас тяжело найти...

RumEvo
Автор

Воу - воу - воу! Как раз смотрел твои туториалы, и думал, что канал заброшен! А вот бац!

adamkalinin
Автор

Сразу осознать сложно. Но результат впечатляет!

alexserba
Автор

Порадовали вы меня, дождалась, ура!)))

Kipelovna
Автор

Спасибо за урок. Но из-за постоянного скроллинга теряется фокусировка на коде..

pipa-pgkp
Автор

1 вопрос: Мы делали программу, которая проверяет состояние компьютеров (онлайн/оффлайн).
Дано:
Кол-во компьютеров: 1000 шт.
Кол-во потоков: 2.
Пинг: 1 мс.

Ожидаемое решение:
(Как я понял в Листе 1 показывается кол-во компов, которым отправили пакеты, а в Листе 2 показывается кол-во компов, которые ответили).
2 потока должны завершить проверку компьютеров за 1000 мс. То есть первый поток проверяет с 1 по 500 компьютер, а второй с 501 по 1000. Эти потоки должны делать все одновременно, то есть, когда первый поток начинает проверять 1 комп., второй поток должен начинать проверять 501 комп.

Ожидаемый итог:
Они заканчивают работу за 1000 мс (отправка пакетов одним потоком занимает 500 мс, прием занимает столько же).

Решение из видео:
Первый поток проверяет все 1000 компов за 2000 мс (отправка и прием). Второй поток делает тоже самое.

Итог из видео:
Первый поток проверил 1000 компов. Казалось бы, работа окончена, но ту же самую работу второй раз проделывает Поток 2.

Вопрос: Потоки ведь нужны для ускорения программы, а тут никакого ускорения не произошло. Просто программа два раза сделал одну и ту же работу. Зачем тогда нужно было добавлять два потока в эту программу? Как сделать так, чтобы потоки работали одновременно, а не ждали друг друга (имеется в виду, что пока первый поток проверяет 1 комп, второй поток проверяет 2 комп и т. д.)

martinflorense
Автор

"За две секунды мы пинганули тысячу машин" – мечты, мечты :)

maratburnaev
Автор

Ты где?Уже год нету видео, ивангаем хочешь стать?

АлександрСоболев-бт
Автор

значит в реале первый метод пингует айпишники, а второй принимает обратный сигнал. И пока первый метод пингует, второй уже сразу принимает сигнал? этого мы достигли в конце? а интересно можно ли сделать 2 новых потока (т3, т4), t3 чтобы пинговал вместе с т1, а т4 чтобы принимал сигнал вместе с т2. Ну и чтобы в конце они поменялись

alext
Автор

Потоки ведь нужны для того, чтобы ускорять программу. На видео программа не ускорилась, она просто выполнила работу два раза. Как сделать так, чтобы потоки выполняли работу одновременно, а не поочереди. То есть пока первый поток проверяет 1 комп., второй поток проверяет 2 комп и т. д.?

martinflorense
Автор

Спасибо за урок. Но у меня "Потреченное время: 6452" вместо 4000. Вроде я выполнил все как в видео на 100%.))

alexqa
Автор

Прикольная тема, это типо Multitasking в ядре. Псевдо параллельность.
Нить 1: методы 1 2 1 2 1 2
Нить 2: методы 1 2 1 2 1

nikkgd
Автор

а если volatile на листы повесить?? что будет

Shjman
Автор

ггг. А в подкасте 3 ты наоброт говорил, мол какое же обучение без мата:)
И преподы в колледже ругаются))) Прудник или Шишанков ругался?:)

Игорь-рцу
Автор

сегодня уже как бы вторник. где обещаное видео? ((

nevdatny
Автор

Меня мучает вопрос в конце СеНеРа что это значит?

dustyschneidtmille
Автор

я никак не могу въехать, как получаются 2 секунды :D
первый поток начинает парт1, второй простаивает -->>тратится 1 секунда -->> первый поток начинает парт2, второй начинает парт1 -->>тратится 1 секунда -->> первый закончил работу, второй начинает парт2 -->> тратится 1 секунда-->> оба потока закончили работу. но это 3 секунды! где я ошибаюсь?

kad_march
Автор

А у меня после самого первого запуска секунд потрачено не 4000 а 2994, почему?

ІлКо
Автор

А можно просто синхронизировать метод main() и будет тот же результат. Тоже работает в два раза быстрее. и не нужно создавать дополнительных объектов. Метод научного тыка)))

igorankerman
Автор

Процесс и поток это вообще то разные понятия в Java

ssurrokk