Тёмный

Многопоточность в Java: основы 

Computer Science Center
Подписаться 161 тыс.
Просмотров 111 тыс.
50% 1

Общие сведения о параллелизме. Запуск и остановка потоков. Синхронизация потоков: synchronized, wait, notify. Модель памяти. Ключевое слово volatile.
Лекция №10 в курсе "Java" (осень 2014).
Преподаватель: Алексей Владыкин.
Страница лекции на сайте CS центра (с презентацией): goo.gl/FMDaEg

Опубликовано:

 

23 апр 2015

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 70   
@user-xl5ri7ut4t
@user-xl5ri7ut4t 2 года назад
Тайминг (лайк чтоб поднять наверх) 05:10 Закон Амдала 10:00 Виды параллелизма в Java 12:24 Проблемы параллельных программ 15:35 Основные методы Thread 18:45 Как диагностировать проблему? (Thread dump) 20:59 Создание потока ( имплементация Runnable || расширение Thread) 22:28 Жизненный цикл потока 30:17 Прерывание потока 40:30 Возможности встроенной синхронизации 52:30 Ожидание и уведомления { wait() ; notify() ; notifyAll() } 01:09:16 Про Атомарность 01:11:49 Про Видимость 01:13:35 happens before
@romanfirsov89
@romanfirsov89 2 года назад
спасибо
@user-vasya-kosmachev
@user-vasya-kosmachev 9 месяцев назад
лучший!
@drochit5901
@drochit5901 2 года назад
смотреть в 2021 году, не знаю, насколько это актуально, но в целом, все что мне надо было я тут смог подробно разьяснить)
@asriyanarseniy8356
@asriyanarseniy8356 2 года назад
Алексей Владыкин, спасибо Вам большое! Не встречал еще более компетентного преподавателя по джаве. Поставленная речь и глубокие знания, никаких слов паразитов и обсасывания, только четко и по делу
@konstantinchvilyov9602
@konstantinchvilyov9602 7 лет назад
Спасибо, Алексей. Мне очень нравятся Ваши лекции
@TTTuTTT
@TTTuTTT 6 лет назад
У человека преподавательский талант - умение объяснять логично, без лишних слов, простым, понятным, но достаточно научным языком. Действительно отлично. Капля критики - не объяснил, хотя использовал volatile(я имею ввиду в контексте кэша потоков) и join.
@crashoverride9681
@crashoverride9681 7 лет назад
Спасибо Алексей! Лучшие лекции по Java! Респект!
@denisgorbikov561
@denisgorbikov561 4 года назад
Очень чёткая лекция и отличный лектор. Спасибо!
@nxllifier
@nxllifier 6 лет назад
2 дня стоял на месте в изучении данной темы, после вашей лекции произошел сдвиг)
@user-hq6nm2tf6j
@user-hq6nm2tf6j 7 лет назад
спасибо, понравилась лекция
@Devivl
@Devivl 7 месяцев назад
Посмотрел на одном дыхании. Очень интересно. Спасибо, Алексей и команде. ❤
@katorabian
@katorabian 3 года назад
В принципе, лекция очень растянута по времени, однако, в поддержку лектора замечу, что материал был в должной мере исчерпывающим и затрагивающим, предвосхищающим, вопросы и аспекты, с которыми я не был знаком на момент начала лекции. Спасибо, за лекцию! UPD:// Смотрел в 1.75
@user-qy4dt8sx7l
@user-qy4dt8sx7l 8 месяцев назад
Спасибо! Супер лекция, все очень доходчиво!
@mikhails6396
@mikhails6396 2 года назад
Спасибо, отличная лекция
@nerale
@nerale 2 года назад
Кто тоже с JavaRush?
@user-uc5nl9vr4o
@user-uc5nl9vr4o Год назад
Спасибо за лекцию!!!
@IT-no1wi
@IT-no1wi 3 года назад
Отличная лекция, огромное спасибо Алексей! Но есть один вопрос, на 40:15 Вы говорите, что спящий демон еще не завершился, но виртуальная машина его все равно "прибила". Скажите, пожалуйста, а вычисляющий демон разве не был также "прибит" виртуальной машиной ?
@immiko7780
@immiko7780 4 года назад
Про volatile не полностью раскрыта тема. Volatile гарантирует что данные будут читаться из основной памяти, а не из кэша потока.
@slavamobile3733
@slavamobile3733 2 года назад
Нет, volatile этого не гарантирует
@yanlevchenko3870
@yanlevchenko3870 2 года назад
@@slavamobile3733 volatile гарантирует, что все потоки всегда будут использовать общее, исходное значение, и они будут видеть изменения этого исходного значения другими потоками сразу же.
@alexgorodecky1661
@alexgorodecky1661 2 месяца назад
Нет. Volatile гарантирует "volatile read" happens before "volatile write", что в следствии гарантирует sequential consistentsy
@HAXYU_MODERN
@HAXYU_MODERN 3 года назад
Оооооо! Фиолетовый чел! Здарова! Рад, рад =)
@user-fg8oo5fu6h
@user-fg8oo5fu6h 3 года назад
28:40 - а разве метод println не потокозащищенный?
@user-pt2lq1ik7i
@user-pt2lq1ik7i 4 года назад
54:40 Мне кажется, не совсем корректно говорить, что мы "засыпаем" в методе synchronized при вызове wait. После того, как на объекте в блоке synchronired вызвали метод wait, поток покидает блок или метод synchronired и перемещается в "комнату ожиданий" и как только его ожидание прервали notify или notifyAll (или по тайму), он включается в борьбу за монитор на общих основаниях с остальными потоками.
@alexmarkov9943
@alexmarkov9943 Год назад
интересно но тяжело, дается освоение многопоточности, хотел спросить а вот по последнему примеру на синхронизацию - где по блоку синхронизации, если вместо валатайл, указать в private Singleton (аргументы ) for и zip - тоже будет некорректное событие при составление блока синхронизации? - заранее спасибо. )
@pilotivanovich
@pilotivanovich Год назад
Лекция местами не проработана, например, нужно вначале объяснить Java model memory и happens before. И тогда правильно сказать, что race conditions - это работа с разделяемой переменной вне happens before.
@KiRuFfKa
@KiRuFfKa 4 года назад
1:06:58 - не понимаю, о какой конкретно второй нити здесь идёт речь? Мы же выше всего одну нить запустили - DepositThread(account).start()
@serjpavlenko
@serjpavlenko 4 года назад
Главная нить, которую мы запустили через main. Она запускает параллельный процесс пополнения и пытается снять. Всего 2 нити.
@mklopotnuk
@mklopotnuk 3 года назад
Поясните, с законом Амдала я не понял. Например берем 1 процессор и меняем долю вычислений, которые можно распараллелить, и при любом P, S будет равно 1, почему Алексей говорит, что в случае с N=1 график может уйти вниз. Может 1-P должно быть по модулю?
@komdiv4906
@komdiv4906 2 года назад
Р-не может быть более 1. Это ведь доля от целого. Если вы распаралелили 40% от всего кода, то ваше р=0.4 .Соответственно никакой модуль не требуется.
@user-cx4nj6io8x
@user-cx4nj6io8x Год назад
Всем привет, у меня появился вопрос: в java есть многопоточность а в php нету, но в php я для задачи запускал много процессов для параллельного выполнения задачи импорта данных из файла excel для пример, в результате я на своем слабом компьютере запускал 50 процессов, которые в 50 раз быстрее и выполняли задачу(согласно затраченному времени например 12 часов при 1 процессе, а при 50 процессах 15 минут), каждый процесс ел оперативную память. Но теперь я никак не могу понять преимущества многопоточности, как я понял один поток на 1 ядро, ну например 4 ядра 4 потока и вот задача будет в 4 раза быстрее выполняться против в 50 раз быстрее php. Может что-то я не правильно понимаю, как я понял, в java есть тоже многопроцессорность, но якобы очень большие ресурсы на запуск jvm. Как-то странно у меня в голове не укаладывается php быстрее java получается в этом плане?))) Или в java можно тоже запускать 50 потоков на 4х ядерном компе, они просто будут попеременно выполнятся на ядрах.
@user-ux3ji1ek3p
@user-ux3ji1ek3p 2 года назад
Вроде понятно все. Но теперь понимаю, что много чего не изучено. и сколько лет мне придется все учтиь =*(
@slavamobile3733
@slavamobile3733 2 года назад
Почему все синхронизируются по типу в сингелтоне?
@sayhellotoroy
@sayhellotoroy 5 лет назад
Лайк, если перешел сюда из javarush :)
@GusarEvgeniy
@GusarEvgeniy 5 лет назад
Ссылка на вторую часть: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-umTVNoG3760.html
@user-bd3ij4op5k
@user-bd3ij4op5k 5 лет назад
гугл)
@bigball6392
@bigball6392 4 года назад
вот у герберта шилдта в справочнике по жаве нашей родненькой, есть еще пару интересных штук о потоках. Советую почитать
@shydegenerate9967
@shydegenerate9967 4 года назад
Я же наоборот - пришел сюда, закончив читать 11 главу, сначала было все ясно, но потом застопорился на теме синхронизации потоков, там настолько все запутано, что в голове не укладывается.
@user-sh8zj8ij6z
@user-sh8zj8ij6z 4 года назад
@@shydegenerate9967 Такая же ситуация )
@user-mj7qw6ob4h
@user-mj7qw6ob4h 2 месяца назад
То что вещатель разбирается в тем понятно, но объяснить толком даже не пытается, для тех, кто только учит многопоточку, после просмотра данного видео больше вопросов появится чем ответов
@YWNWA-ZXC
@YWNWA-ZXC 5 лет назад
а что такое checkAmountNotNegative? у меня такого нет и даже без него работает
@bigball6392
@bigball6392 4 года назад
наверное метод, проверяющий, а не ушел ли баланс в минус.
@vasiliyditiatkin6848
@vasiliyditiatkin6848 5 лет назад
спасибо, чувак!!! разжевал и всё в клювик плюнул, как мама птица птенцу.
@antonkaschin7073
@antonkaschin7073 4 года назад
на скорости 2x смог посмотреть
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil Год назад
Хорошо что указатель мыши видно
@user-dv1nc2xo2w
@user-dv1nc2xo2w Год назад
6:06 что значит вычислительные ядра? Физическое кол-во ядер или логическое? Я просто в этом не шарю
@tankostream
@tankostream 7 лет назад
Алексей, зачем вы стул ломаете? (в самом конце) :)
@SergeyDeadDenne
@SergeyDeadDenne 4 года назад
С какого перепуга график вниз пойдёт? Вы его не задержите тем, что не сможете открыть след. потоки, просто проц скажет, выполняю по списку! сразу 2 потока не поддерживаю. График будет идти строго по 1це
@user-zr9zv6jr6w
@user-zr9zv6jr6w 4 года назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-kma6T8OAQ-Q.htmlm53s
@polyackov_ot
@polyackov_ot 3 года назад
@@user-zr9zv6jr6w почему все кто рассказывает про многопоточку болеют)) пожалуй не буду изучать этот раздел, он заразный))
@user-zr9zv6jr6w
@user-zr9zv6jr6w 3 года назад
@@polyackov_ot думаю, не всё так страшно))
@alexgorodecky1661
@alexgorodecky1661 2 месяца назад
С такого перепуга - накладные расходы на переключение контекста
@user-pu1ec8jd5t
@user-pu1ec8jd5t 2 года назад
не понял зачем нам тогда использовать volatile если можно через synchronized также все проводить и это будет давать нам ту самую атомарность
@_bigbro
@_bigbro 2 года назад
вопрос не корретно поставлен. Volatile - это инструкция для JVM, чтобы перед чтением процессор обновил состояние переменной из оперативной памяти. чтение памяти занимает порядка 5 тактов CPU и в идеальном случае второй поток успевает выполнить 5 операций с этой переменной synchronized - это жесткая блокировка одного или нескольких полей класса. пока кто-то работает в синк методе, все остальные потоки тупо ждут. а атомик классы - они ставят блокировку в оперативной памяти. как только поток хочет изменить данные, то он ставит барьер в память и все остальные потоки встают на блокировку, пока барьер не будет снят.
@alexgorodecky1661
@alexgorodecky1661 2 месяца назад
На volatile переменной невозможно сделать read-modify-write операцию, так как критической секции(синхронизации) нет. С помощью volatile вы можете лишь из одного потока "отдать" данные а в другом забрать. Для реализации синхронизации нужно как минимум две volatile переменные для минимального лока Деккера, что по факту спинлок, а там и до мьютекса не далеко (synchronized)
@alexgorodecky1661
@alexgorodecky1661 2 месяца назад
@@_bigbro, не путайте блокировку кэш линий при атомик операциях с барьерами памяти(mfence)
@dibehemoth401
@dibehemoth401 Год назад
А почему по формуле на одноядерном проце он график вниз нарисовал? Если N=1, то там тупо константная единица получается, нет? Ну, что и логично, ведь ток виртуальная многопоточность будет.
@alexgorodecky1661
@alexgorodecky1661 2 месяца назад
Накладные расходы на переключение контекста
@user-zv6ge2bt7j
@user-zv6ge2bt7j 5 лет назад
как поставить два лайка?
@yourmuse3234
@yourmuse3234 3 года назад
Стив джобс))
@kremen1571
@kremen1571 4 года назад
скорость на 1,5 и можно смотреть..
@AndreyDeveloper
@AndreyDeveloper 7 лет назад
Господин Владыкин, вы меня слышите? Как у вас только наглости хватило не включить многопоточность в степик-курс? Вы нас, можно сказать, интеллектуально обокрали!
@crashoverride9681
@crashoverride9681 7 лет назад
Не реви. Смотри здесь.
@user-uq7ri1pz2c
@user-uq7ri1pz2c 7 лет назад
Дак тут и нет ничего про многопоточность то...
@crashoverride9681
@crashoverride9681 7 лет назад
почему?
@aanndd739
@aanndd739 4 года назад
45:22 Монитор или мьютекс? Монитор - это паттерн.
@antonalekseev2694
@antonalekseev2694 6 лет назад
Спасибо! Почти все здорово. Вот этот материал (ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-G8XGUqZs5KI.html ) помог бы улучшить восприимчивость Ваших лекций.
@user-hf5ry2ni8r
@user-hf5ry2ni8r 6 лет назад
Такая интересная тема , но тут как-то скучно !
@Sk-gb2hx
@Sk-gb2hx 4 года назад
на самом деле слабая лекция , не понимаю почему все хвалят , всё довольно путано , много важного осталось не озвученным
Далее
She’s Giving Birth in Class…?
00:21
Просмотров 7 млн
I Built 4 SECRET Rooms In ONE COLOR!
29:04
Просмотров 13 млн
Многопоточность и GIL
1:21:47
Просмотров 34 тыс.
Тестирование Java-программ
1:22:04
Просмотров 28 тыс.
Виртуальные потоки в Java
23:00
Просмотров 9 тыс.