background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Java. Урок 8. Атомарные операции. Конкурентые коллекции"

input logo icon
Теги видео
|

Теги видео

html
css
javascript
php
npm
nodejs
c++
c#
python
web-development
develop
git
svn
java
es6
ssh
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:02
многопоточность которые мы с вами не
00:00:04
досмотрели которая стоила бы досмотреть
00:00:08
это соответственно атомарные операции и
00:00:11
конкурентные всяких коллекции значит
00:00:13
первое это атомарные операции также
00:00:16
товарность все понимают товарность
00:00:20
неделимость не деревне операции да
00:00:22
конечно не влазит неделимость операции
00:00:24
это как в эту значит что либо операция
00:00:27
выполняется любят брать не выполняется
00:00:29
это не может очистить вот да все помнят
00:00:32
эту штуку просто встречали будет про это
00:00:35
рассказывать они на первом семестре про
00:00:37
то что было там вот и новый смысл это
00:00:44
понять этом верности
00:00:45
про принимает в контексте
00:00:47
многопоточности то есть мы понимаем у
00:00:51
нас все проблемы с нашими доступом и
00:00:53
синхронизации данных возникают из-за
00:00:55
того что некоторые действие являются не
00:00:59
атомарных да то есть добавление элемента
00:01:02
в массив требует обращения массива и так
00:01:05
далее так далее так далее значит
00:01:06
расширение мотивы действий не атомарная
00:01:08
и пока один поток там хочет его в него
00:01:11
добавить если второй поток тоже начнет
00:01:13
это делать то они передерутся именно из
00:01:15
за того что вот это самого само действие
00:01:17
занимает некоторое время этого раз
00:01:20
предполагает что действие происходит
00:01:23
сказать мгновенно с точки зрения нашего
00:01:27
дискретного времени то есть это не
00:01:28
значит что они не занимают посты со мной
00:01:30
выявит значит они просто вот с точки
00:01:31
зрения согласование действий для нашего
00:01:34
дискретного времени происходят минарет
00:01:36
вот и поэтому если действие является
00:01:39
атомарном то она является фактически
00:01:41
потока безопасно понятна идея в принципе
00:01:46
так условно говоря можно сказать что все
00:01:48
эти наши синхронизировать и прочие
00:01:52
мьютекс и делают надзор операции мы с
00:01:55
учи зрения многопоточности атома
00:01:58
но в современных этих турах есть более
00:02:03
такой простой способ добиться потом
00:02:05
верности которые встроен большинство
00:02:08
современных архитектур называется
00:02:12
м п and set вот и в частности в джаве
00:02:16
этот комплект представлен некоторым
00:02:19
набор классов и один из них о том mic in
00:02:22
the jar
00:02:24
томик
00:02:40
atomic интеджер можно попробовать
00:02:43
открыть по нему документация
00:02:47
он находится в pkg java конкурент а
00:02:50
томик и тем что в него можно у него есть
00:02:58
некоторый набор операции которая
00:02:59
происходит гарантированного начнут
00:03:03
понимаете писать там записывать в целое
00:03:05
число если она там помещается в регистр
00:03:08
процессор можно потом она без каких-то
00:03:12
плясок с буквами то когда вы хоть и
00:03:13
винтовую перемены записывать и новое
00:03:15
число то не может получиться так что половина
00:03:17
числа записалась половина честно не
00:03:19
записалось
00:03:21
а вот если вы например делаете инкремент
00:03:24
некоторого числа нет места машинисты ну
00:03:36
смысле машины не регистры процессора не
00:03:39
регистров или виртуальная машина ну вот
00:03:43
дело в том что от виртуальной машиной не
00:03:44
зависит это происходит на фоне процессор
00:03:48
и как пишет в кусок памяти than i do
00:03:52
стекла машины здесь неважно когда мы
00:03:56
делаем там кинг и равна нулю и плюс плюс
00:04:04
вы же согласно что получается что у нас
00:04:07
там на самом деле не одна операция
00:04:09
сначала считывается и потом к нему
00:04:13
добавляется единичка потом результат
00:04:16
записывается в общем все долгую ну и
00:04:19
поэтому мира если мы захотим сделать
00:04:21
такую ну например мы хотим посчитать
00:04:25
вот в этом вашем примере parallels 3
00:04:27
помните наш класс 3 ну к примеру мы
00:04:31
захотим посчитать есть долг делается до провел
00:04:37
что им делать несколько поток ну
00:04:38
например за хотим посчитать количество
00:04:41
потоков которые одновременно работает
00:04:43
можем это сделать
00:04:50
премьер вот а вначале мы будем наш и
00:04:52
увеличивать от конце будем ему мешать
00:05:01
минус минус куда покомпактнее но уже
00:05:22
используем готовый готовые куски кода ну
00:05:27
да здесь можем его там вводить будет
00:05:38
потопа безопасно то есть получится ли у
00:05:41
нас нормальный данные его триггеров не
00:05:46
получится нулю и вообще будет отображать
00:05:49
и реальное положение дел с некоторые но
00:05:52
только с некоторой вероятностью да то
00:05:54
есть на самом деле поскольку у вас один
00:05:57
поток считал значение из этого и под
00:06:00
параллельности второй поток считал
00:06:02
значение да так далее так далее площадь
00:06:05
1 изменил значение записал второй
00:06:07
изменил значение записал почти
00:06:10
получается что результаты первого потока
00:06:12
были потеря так как мы можем это
00:06:15
избежать увеличить если она объявлена
00:06:23
как поле класса то может если она была
00:06:25
здесь внутри то не могла как можем с
00:06:28
этим бороться уже используя известная
00:06:32
нам методы перед тем как да то есть
00:06:38
поставить лог принципе это будет
00:06:42
работать новый туалет есть недостаточно
00:06:44
как вы понимаете что случится да мы
00:06:50
убьем все многопоточность а точнее не
00:06:52
всю но билл большую часть поскольку все
00:06:55
наши потоки будут
00:06:56
вынуждены друг другом согласовываться и
00:06:58
не заходить внутрь пока первый не выйдет
00:07:01
получится что степень расположение нашей
00:07:04
программы сильно упадет
00:07:05
вот и все это проблема в том что
00:07:07
операция плюс плюс не to mars до 10 вот
00:07:14
эти самые atomic interjet и которые в
00:07:16
эту операцию присту сделаю то товар и
00:07:18
можно ее например
00:07:21
собственно использовать вместо и взять
00:07:24
наш атамекен тоже ну и там умер
00:07:30
инкременты макет а здесь можем сделать
00:07:36
наш open the jar
00:07:41
декремент
00:07:43
то есть все операции при стус в данном
00:07:46
случае является товарный и поэтому
00:07:50
синхронизация здесь не нужно просто
00:07:54
запустить посмотреть в этом случае будет
00:07:56
все острее всего ничего особо
00:07:58
осмысленного нам не выведет но пока не
00:08:01
имею поговорим ну вот зимой даже
00:08:06
запустил с 5-ти потоков они даже
00:08:10
параллельно отработали наша судит о том
00:08:13
что этот метод
00:08:15
считался параллельно понятна идея
00:08:20
кстати если мы добавим этих штук
00:08:31
ну вот дата приказа из чего
00:08:35
конечной давайте увидим конечно
00:08:52
на его руки mentira
00:08:54
начали в планшете комитета изначальный
00:09:00
роль можешь даже написать явно что-то
00:09:07
вот тут-то те узы можем отслеживать
00:09:09
количество потоков одновременно
00:09:11
работающих да еще можем судить что до
00:09:14
что в конце они действительно лишь
00:09:16
секунду и что де-факто распараллеливание
00:09:20
у вас происходит на уровне максимум до
00:09:22
восьми одновременно считающихся функций
00:09:24
баз в общем то здесь это очень полезная
00:09:26
штука под парами для такого рода
00:09:28
операции когда вам нужен какой-то
00:09:29
счетчик когда вы хотите что-то считать
00:09:31
единственный косяк что конечно хотелось
00:09:34
бы использовать его для более сложных
00:09:37
операций но вот для счетчиков можете
00:09:40
использовать их продавать во сколько
00:09:41
счетчик многопоточной делать его от под
00:09:43
как эта штука происходит на уровне
00:09:45
инструкций процессора и поэтому
00:09:48
синхронизация здесь не нужно
00:09:49
соответственно работать оно будет
00:09:51
гораздо быстрее
00:09:52
понятный день собственно вопрос а что
00:09:56
внутри внутри там используется самое
00:09:59
славное из функция под названием compare
00:10:00
and set можем с ней разобраться на
00:10:03
примере на собственно можем не и
00:10:07
полюбоваться этим возьмем когда the mic
00:10:11
in the jar
00:10:14
вот на самом деле да и где-то более
00:10:19
сложная операция на самом то есть внутри
00:10:21
используют это славная операции по
00:10:23
названием compare and set значит как и
00:10:26
следует из названия что она делает она
00:10:28
сравнивает и устанавливать значение
00:10:32
значит у нее есть некий
00:10:34
некое значение которое она ожидает
00:10:36
увидеть висеть в которого находится
00:10:38
писать это значение которое она хочет
00:10:41
мне записать понятно если при записи
00:10:46
которое происходит от amara в ищите
00:10:49
казалось то значение которое она ожидала
00:10:51
увидеть то в этом случае это значение
00:10:55
будет это значение будет не успешно
00:10:57
записан а если она увидела там культовое
00:11:00
значение то соответственно операция
00:11:02
будет провален и новое значение
00:11:04
записано не будет ясно вот это такая
00:11:09
базовая операция каталога
00:11:10
микропроцессора предоставляет нам
00:11:13
возможность а там варна обновлять
00:11:15
некоторые даже наши данном случае эта
00:11:17
операция либо
00:11:18
успешно производится если данные не
00:11:21
изменились например другим потоком либо
00:11:25
соответственно не производится если
00:11:27
данные измениться как на основе этой
00:11:30
операция реализовать инкремент все
00:11:32
хорошо понимаете ну ладно можем и
00:11:36
примере например не инкремента она примера поиск
00:11:40
максимального значений да вот пока бы
00:11:42
так ищет максимальное значение а мы вот
00:11:44
supply пробегать еще параллельно поищи
00:11:46
максимальное значение через стандартное
00:11:47
переменная можем же мы так сделать до
00:11:55
домик макс выпуска это будет равен и мы
00:12:01
хоть и вот это томик макс обновлять
00:12:04
операции которая будет и встроенной
00:12:07
операции в этот атом арнольд которой
00:12:10
которая бы обновляла на максимальное
00:12:15
значение здесь нет так но есть вот
00:12:18
только вот эта самая готовая операция
00:12:20
конферансье
00:12:22
значит вот наша наш первый наша первая
00:12:25
функция нашего нам какой-то макс
00:12:28
также нашла значит мы можем попробуем
00:12:33
записать нашу эту переменную а томик
00:12:36
макс
00:12:49
просто записывать это не то чем сравнить
00:12:55
он просто запишет вне зависимости ничего
00:12:57
вот но это как бы плохо
00:13:00
мы хотим иметь возможность в этот
00:13:04
записать в раза томик макс только в
00:13:05
случае если он больше того которое там
00:13:07
был такой так мы обычно максимальное
00:13:11
значение еще не смогли бы сделать домик
00:13:17
макс . дед сказать что это какой-нибудь
00:13:21
там наш and haven't макс и дальше их
00:13:33
макс больше чем corrente макс туда
00:13:38
записано вот так бы это бы выглядело то
00:13:48
наши полярный но такая штука понимаете
00:13:51
не потока безопасной потому что между
00:13:54
вот этим детям и вот этим светом долго
00:13:57
потопа бог изменить это значение макса так весь
00:14:00
соответственно мы вместо сет используем
00:14:05
не функцию set a используем функцию
00:14:07
compare and set ожидаем мы здесь что там
00:14:15
в коммент макс и записываем туда макс
00:14:19
таким образом эта операция выполняется
00:14:22
только в том случае если наши перемен
00:14:28
готовит макс на момент записи
00:14:30
макс оттуда хранится к ент макс понятно
00:14:35
один
00:14:37
понятна идея то есть за счет чего мы
00:14:40
достигаем потока безопасности месяц
00:14:45
поста было бы сделали сет то получилось
00:14:47
бы что за время работы что-то изменилось
00:14:49
этим сделаем compared to мы проверяем
00:14:52
а изменить если что-то за время работы и если до
00:14:56
соответственно если не изменилось там
00:14:58
ничего не делает да но вопрос а если это
00:15:01
что-то записалось но тем не менее это
00:15:03
значение все равно меньше чем текущий
00:15:05
бакс так ведь значит мы должны проверить
00:15:09
осталось до плюс проверить это новое
00:15:13
значение топить ну то есть смотрите у
00:15:15
вас нарисовать или на словах понятно
00:15:18
значит у меня есть 1 вот у меня есть
00:15:21
какой такой and max в нем допустим
00:15:27
сначала 0 вот у нас есть два потока и
00:15:33
один хочет то записать макс
00:15:37
равный не знаю . а второй поток хочет
00:15:41
записать по макс равный 5ok
00:15:46
значит этот макс считывает из этой
00:15:50
этот нас atomic говорит макси значит
00:15:53
считывать из него кур макс получает
00:15:59
получается здесь 0 до считывается из
00:16:02
него этот штука тоже считывает coolmax
00:16:07
получается что здесь ноль сравнивает
00:16:17
значит выясняет что что 3 больше чем
00:16:20
ноль так значит она должна сюда записать
00:16:24
этот самый 3 она делает до компонент
00:16:35
соответственно 03 делает успешно сделала
00:16:42
так потому что там сейчас хранится 0 но
00:16:45
она сравнивает а не ноль или там там 0
00:16:48
поэтому она успешно туда все записал
00:16:52
теперь этот параллельно с этим в этот же
00:16:55
момент делает их этого катера выясняет
00:16:58
что 5 больше 0
00:16:59
так ведь и хочет записать хоть что
00:17:06
записать соответственно можно получать у
00:17:13
него это сделать нет потому что там уже
00:17:17
когда момент хранится 3 так ведь и эта
00:17:20
операция файл но максимально это 5 они 3
00:17:28
в результате то мы хотим получить что
00:17:29
тут 5 так то есть по безопасности есть
00:17:38
нечего делать до самом деле если мы
00:17:45
выяснили что значение изменилось чем
00:17:47
можем сделать
00:17:49
можем прочитать новое значение iso быть
00:17:52
с ним но как это будет выглядеть где-то
00:18:00
кроме кроме лазаревского у вас
00:18:02
кто-нибудь понимаете происходит деду и
00:18:07
дули так давайте я хочу чтоб я там
00:18:12
кто-нибудь готов бы рискуете один
00:18:13
закончить
00:18:16
да быть в одиночестве защищать тепло
00:18:20
даже кузнецов видимого скину ну давайте
00:18:25
и дед где поняли если наши компоненты
00:18:30
нас это возвращает булево значение если
00:18:32
вы против внимание который говорит о том
00:18:35
успешно red операции линии успешным
00:18:37
соответственно если она не успешно то
00:18:39
чем должны сделать еще раз
00:18:47
где поехали здесь это каких проблем
00:19:09
доверять еще предложениях так может
00:19:41
запомнить задачка на уровне дизайн 2
00:19:44
семестра из не 1 цикл и
00:19:48
и их операторы языков программирования
00:19:55
но ты пока не станет так скарбом чучело
00:19:58
ведь он не хочет открытый формат вы все
00:20:01
не вижу здесь korvac а потому что он
00:20:04
обижен вот и тут можно пополнить его
00:20:07
вынести сюда с этим чего cifam чем
00:20:17
делать так и оставим то есть здесь ты не
00:20:22
зависит от того больше не больше не и
00:20:26
так антипов умеете циклами пользоваться
00:20:30
хочу делать видит проблем болели вот
00:20:35
этот раз нужно запустить еще раз считать
00:20:39
еще раз проверить и еще раз запустить
00:20:41
проверить таким надо но проверку нас
00:20:43
почему-то не на что не влияет ты че
00:20:57
вообще делаете чтобы куда мы одеваем
00:21:03
ты можешь смотреть здесь
00:21:12
ну вот антипова словно программисты и
00:21:15
подлежат кто бы сомневался да так этот о
00:21:23
чем хотели получить
00:21:25
или наше главное эксперты
00:21:28
программирование скажут что можно
00:21:29
предлагать
00:21:40
неважно прямой переписывал мне кажется
00:21:58
чтобы я против лучший вариант но ко мне
00:22:06
так так наверно было повеселее наша
00:22:19
считываем формации пока макс больше чем
00:22:23
and max и нам удалось записать это в
00:22:26
нашу память точнее наоборот значит пока
00:22:28
больше чем армакс и соответственно не
00:22:32
удалось записать повторяем понятна
00:22:37
понятна идея
00:22:39
ничего видим посмотрим правильно носить
00:22:44
делаю
00:22:56
он же народа ну совпадает понятна идея
00:23:08
как работают эти атомарные операции
00:23:11
инкремент согласно что фрицами можем
00:23:14
сделать аналогично так понятно почему
00:23:20
здесь нет лодкой что используется вместо
00:23:22
лака до будете ломать с никаких нет то
00:23:25
есть мы наладили взаимодействие между
00:23:26
потоками наши потоки могут иметь общие
00:23:29
данные но при этом не использовать
00:23:30
блокировки они вместо этого используют
00:23:34
это зоне оптимистичное будете рост то
00:23:37
есть на самом деле она ничего не
00:23:39
блокирует но последний момент она
00:23:41
проверяет а не изменилось ли что-нибудь
00:23:42
в мире
00:23:43
если что-то изменилось то значит она
00:23:45
считает что все ее все что она делала
00:23:47
бессмысленное нужно повторить действие
00:23:49
понятный день но в итоге мы достигаем
00:23:53
того же эффекта что и есть вы поставили
00:23:56
синхро дать
00:23:57
это лучше чем сидеть все согласны что то
00:24:03
лучше чем сохранить их можно второй курс
00:24:09
скажет кто-нибудь
00:24:10
экспертное мнение это товарные
00:24:12
переменной лучше чем страдать исходя из
00:24:17
всего этого до с тем более что вы уже как-то это по
00:24:19
моему мужу обсуждать давно непременным
00:24:35
доступно они как бы облагаются ли
00:24:40
симмонс они будут скованы семантика это
00:24:46
уровень семантики аналогично все учились
00:24:49
у нас абсолютно дача соответственно
00:24:51
зависит от ситуации
00:24:52
большинства нормально переменной давайте
00:24:55
разбираться насколько здесь ситуации то
00:24:57
есть будьте вовка если бы был бы
00:24:59
синхронность
00:25:00
у нас все потоки башенного
00:25:02
один поток выполнял по работу потом они
00:25:04
все и потом зрелище потом выполнял бы
00:25:07
работать тогда и так далее то есть у нас
00:25:10
с одной стороны ничего параллельно не
00:25:12
происходит но удовольствие никто ничего
00:25:14
не переделанной также в данном случае у
00:25:17
нас эти потоки могут
00:25:18
операции внутри нашей штуки выполнять
00:25:22
параллельно да но вот эти кого-то может
00:25:27
быть что то придется переделывать
00:25:30
соответственно если у нас потоков очень
00:25:32
много и они все все все заходят в эту
00:25:35
что эту штуку то есть вероятность что им
00:25:38
придется переделывать так ведь а если
00:25:42
потоков много им приплавить из них
00:25:43
приходится переделывать то да просто
00:25:50
здесь у нас это против учинила да вот в
00:25:53
этом нет но если потоков очень много и
00:25:55
половины из них даже вынуждены
00:25:57
переделывать эту операцию получается что
00:26:00
у нас как снежный ком
00:26:01
чем больше потоков тем больше приходится
00:26:03
переделывать а чем больше приходится
00:26:05
переделывать тем больше потоков будут
00:26:06
крутится крутится крутится в этом цикле
00:26:09
понятна идея и в итоге это может быть
00:26:12
гораздо медленнее чем мог к тому что у
00:26:15
вас слишком много поток
00:26:16
но свойственно если потопов балла то у
00:26:20
вас вообще никаких налогов не будет то
00:26:22
они бы
00:26:24
код будет выполняться политических так
00:26:26
также быстро такой код который никак не
00:26:28
ориентирована по точность вот поэтому
00:26:32
такой вот баланс
00:26:33
ещё очень многое зависит от того
00:26:34
насколько дорогостоящие нам
00:26:36
переделывалась сравнить два числа это
00:26:38
недорого
00:26:39
а вот если вы там писали бы в
00:26:41
какой-нибудь базу данных и что или тоже
00:26:42
вообще что-то длительной здесь вычисляли
00:26:46
да вы бы вас даже лапы поясница ты есть
00:26:50
да собственно транзакции на этом и
00:26:52
строится ну это ж прям на этом на
00:26:54
аналогичных механизмов да кстати не
00:26:59
сначала что там самом низу что-то вроде
00:27:01
этого и будет то зависит операция
00:27:04
дорогостоящий писи переделывать дорого
00:27:05
то разумеется
00:27:07
а томики могут сильно испортить вам
00:27:09
жизнь и никакого пользовательскими здесь
00:27:12
не добьетесь так что думайте в целом они
00:27:15
работ быстрее чем мьютекс и они несколько
00:27:20
водить вас предлогом да потому что никто
00:27:23
никого не блокируется поэтому шанс на то
00:27:25
что ваша программа зависит этот лак от
00:27:27
довольно бал но с другой стороны
00:27:30
получается так что если потоках
00:27:33
очень-очень много то а томики будут
00:27:34
тормозить
00:27:38
ну да не достигнет может учиться во флоп
00:27:42
малой флоксы ты лучше чем до двух потому
00:27:44
что и слоев лака больше шансов выйти из
00:27:46
этого шанса будьте никаких если вы там
00:27:49
специально не не отслеживать их и не
00:27:52
торопить это язык лодку провел выйти
00:27:54
принципе не можете знать флота можно но
00:27:57
опять же здесь очень много потоков то не
00:27:59
исключено что возникнет эффект снежного
00:28:02
кома что там сотня потоков постоянно
00:28:04
выполняющая операцию не могут между
00:28:06
собой поделитесь и к ним присоединяются
00:28:08
еще остальные то у вас будет такой
00:28:10
очень-очень nickelas живущие ваш
00:28:12
процессор блок хотя никакого к де-факто
00:28:16
мет будет только томики понятна идея
00:28:18
то есть о том по сути дела эти атомарные
00:28:22
операции и мьютекс и по
00:28:26
случае использования аналогичны да не
00:28:28
позволяют потоком иметь доступ к общим
00:28:30
данным
00:28:31
и при этом не нарушать их целостности
00:28:34
но зависимости от того насколько
00:28:36
дорогого вычислять эти значения и
00:28:39
насколько много потоков и эти мечты не
00:28:44
будет производить вам стоит использовать
00:28:45
либо долю то оба поэзия вот вообще
00:28:50
говоря если там посмотреть в этом т.к. g
00:28:54
а ну да во первых тут как вы можете
00:28:56
заметить там где-то там дэйт можно там
00:28:59
помощь или выражение все это довольно
00:29:01
сильно упростить это я так как бы
00:29:04
рассказывать пока высокого нам операции
00:29:06
здесь можно все это есть к упростить вы
00:29:08
получили я буду выражение которое
00:29:09
например этот цикл спрячут вот их себя
00:29:13
вот здесь до get it on it up and апдейт
00:29:16
значит это операция которая получает
00:29:20
текущее значение сравнивает его и
00:29:21
записывает если
00:29:23
если она осталась в предыдущем если не
00:29:25
предыдущем то она повторяет операцию по
00:29:28
че делать этот апдейт то есть смотрите
00:29:30
мы считали некое значение из нашего
00:29:34
переменной потом произведения дней
00:29:36
какую-то операцию и возможно записали
00:29:39
туда эти данные по сути дела
00:29:43
эту операцию можно здесь и цикл можно
00:29:46
обобщить долям до выражения также
00:29:49
который принимает на вход то что
00:29:52
записано а возвращает то что нужно
00:29:54
записать понятно соответственно
00:29:59
вместо вместо этого думала можно было бы
00:30:02
написать что-то типа atomic макс
00:30:10
где этот апдейт кору макс макс и макс
00:30:33
понятно я сделал считали что там
00:30:37
записано сравнили если больше то
00:30:40
записываем туда макс
00:30:42
если меньше то записываем туда ку фа
00:30:46
томик макс
00:30:47
но дед это and апдейт получить и
00:30:50
обновить получаем обновляем соответствие
00:30:55
100 обновить не получится с первого раза
00:30:57
да потому что значение которое не было
00:31:00
записано изменится то эта операция еще
00:31:02
раз вызовется в цифры то есть по сути
00:31:04
дела то цикл который мы здесь записали
00:31:06
поможете спрятан внутри вот этой функции
00:31:07
get it но вам не нужно вспоминать все
00:31:13
эти сложности как вы там мне
00:31:15
приписываете фразы про то что цена в
00:31:17
двадцать первом веке не круто вот здесь
00:31:20
вы читаете цикла двадцать первом веке не
00:31:22
круто вот вы можете использовать себя
00:31:23
поражение которое вас бесит вашу цикл
00:31:25
заменит вот так в общем то банальность
00:31:29
просто приятно кстати кто то внимательно
00:31:34
смотрел что мы сделаем скажут что
00:31:36
оставляет ни черта не эквивалента все
00:31:44
тамара конечно но она там она потому что
00:31:47
там внутри такую же цену как бы здесь
00:31:49
написать это бы атомарная обновление
00:31:52
чего угодно
00:31:55
потому что как вы помните мы здесь
00:31:57
пробегали масти авторитет вызывали
00:32:00
только если это условие выполняется disc
00:32:02
after на сет будет вызываться при любом
00:32:04
случае вот но так такая маленькая беда
00:32:10
но тут в общем есть много таких
00:32:12
аналогичных операции вот там есть как
00:32:15
раз функция для акула акула лессинга тоже
00:32:18
можно ее использовать
00:32:19
ну если будет интересно почитать так но
00:32:24
это еще не все где наш пгт кача хочу
00:32:28
пикачу
00:32:29
тут конечно есть там atomic бульона
00:32:31
томми уклон когда жил о корее много
00:32:35
всякого интересного вот но самый везет
00:32:40
конечно версия css позволяет обновлять
00:32:42
любой объект то есть чтобы он не целое
00:32:44
чтобы на лето ссылку и все это без
00:32:49
синхронизации то есть у вас есть где-то
00:32:51
ссылка на какой-то сложный объект
00:32:54
такой вы его в эту ссылку считываете чё
00:33:01
ты там с ней делаете как ты и там
00:33:04
обновляете записываете если параллельно
00:33:06
с этим какой-то поток тоже записывал вот
00:33:09
ссылку какой-то свой объект то у вас все
00:33:12
запариться а если нет то соответственно
00:33:15
все пойдет нормально
00:33:18
соответственно основе этой штуки можно
00:33:20
делать не блокирующий структуры данных
00:33:22
не блокирующую очередь можно сделать
00:33:26
дома использую зари блокирующий очереди
00:33:31
можно сделать не блокирующую очередь то
00:33:35
есть если у нас очередь и светских
00:33:39
элементов похож на очередь вот у нас
00:33:47
есть ссылка это бутил выпускаю будь то
00:33:50
нет нет л.н. это будет n и вот у вас два
00:33:56
потока хотят добавить сюда
00:33:58
новое значение 1 хочет добавить
00:34:02
того хочет добавить значит добавить
00:34:06
новое значение то что значит и значит ну
00:34:09
ладно просто то это означает что ссылку
00:34:11
на and надо обновить также то есть это
00:34:17
надо обновить у этого обновить вот
00:34:21
значит вы сюда добавляем вот значения
00:34:24
один поток самый поток тоже хотите
00:34:27
значение начали разбирать себе ссылку на
00:34:29
it and это берете ссылку на это толкает
00:34:38
взял совпадает эти энды
00:34:40
указывают сюда это тоже
00:34:43
сюда значит этот объект обновил и на
00:34:46
свой соответственно у этого объекта он
00:34:50
должен постановить ссылку на этот объект
00:34:52
и таки успешно сюда записать новый
00:34:57
объект
00:34:59
главное and тоже меня переполняют на
00:35:02
этот объект в список если захочет
00:35:05
обновить эту же ссылку на n заселиться
00:35:10
потому что выяснится что ссылка на and
00:35:12
пока он обновлял изменилась так
00:35:15
следовательно он должен все переделать
00:35:18
следует должен взять этот and еще раз
00:35:20
считать записать до 100 свое и она либо
00:35:27
то диана придет сюда и состоит
00:35:29
обновиться вот то это вот таким образом
00:35:31
вас многопоточность будет обеспечено вот
00:35:35
но никаких лагов не будет то есть все
00:35:37
потоки запишут в очередь свои значения
00:35:39
но может быть правда не то перепутали
00:35:41
все в порядке но как бы да если этот
00:35:45
поток смог сделать раньше зачем все-таки
00:35:47
подошел немножко раньше чем это значит
00:35:50
это справедливо то что то что его
00:35:52
элемент оказался раньше но суть то уж
00:35:54
никаких уроков этим не менее все эти
00:35:56
значения будет успешно записи понятна
00:35:59
идея
00:36:02
разумеется это все не просто так а даже
00:36:06
вполне себе активно используются то есть
00:36:08
если вы там возьмем этот конкурент тут
00:36:12
есть вот специальные классы конкурент
00:36:15
linkit дик ю.и.
00:36:17
and link with heel который как раз таки
00:36:20
основы будете на вот этой самой
00:36:22
атомарной
00:36:23
штуки то есть это не блокирующий очереди
00:36:27
которые позволяют без
00:36:29
лотов записывать в них какие-то новые
00:36:33
значения кстати палангу тоже многом
00:36:36
задачами написание таких на своих не
00:36:38
блокировочных очередей и точки тесно
00:36:41
чтобы значит это пойдите перерыв или про
00:36:44
конкурентные коллекции поговорим еще
00:36:46
чуть-чуть
00:36:48
ну давайте перерыв так значит про
00:36:54
конкурентку поговорили а кстати еще есть
00:36:56
очень интересный класс под названием
00:36:59
купе он райт arraylist вы себе
00:37:05
представляете что такая released обычный
00:37:09
такой самый самый простой векторная а чё
00:37:13
кстати какой думать есть я создал
00:37:16
arraylist ну пускай там будет искать их
00:37:27
не будем также raw начнут вместе
00:37:41
arraylist я его в цикле каком-то обхожу
00:37:45
там не знаю выложу в него какие-то
00:37:49
элементы доложив там на экран например а
00:37:57
[музыка]
00:38:01
параллельно с этим долгом потоки
00:38:03
долго потоки добавляю какой инструмент
00:38:06
[музыка]
00:38:13
что произойдет казалось бы до 1
00:38:17
записывает другую выводит изменяющая
00:38:22
операция только итак допустим она
00:38:24
происходит только от из одного потока
00:38:26
будь какие то проблемы то есть могут ли
00:38:28
возникнуть проблемы потому что есть один
00:38:30
поток читая пишет другой читает то есть
00:38:31
по идее изменяет данный только знал
00:38:34
потока они не должны ночь будет до возраст как
00:38:47
правильно нам намекает
00:38:48
2 что за резкий не забыли на то что
00:38:51
концептуально вроде как чтение данных
00:38:54
их не изменяет поэтому чтение данных в
00:38:58
целом потока безопасно тем не менее
00:39:00
поскольку при обновлении этого списка
00:39:04
могут произойти by location данных то в
00:39:09
итоге этот вывод может начать вот не те
00:39:12
данные которые хотим потакать с одной
00:39:16
стороны с другой стороны итераторы также
00:39:20
в принципе да используются итератора
00:39:22
есть литератор уже там получаем
00:39:26
следующее значение если там получил
00:39:28
следующее значение а там между этими
00:39:30
значениями добавилось еще одно до или
00:39:33
удалилась но вот непонятно как ему этих
00:39:36
ситуациях ввести поэтому вот ничего так
00:39:38
безопасно даже более того на самом-то
00:39:40
деле если эту штуку засунуть сюда из
00:39:45
одного из одного и того же поток то все
00:39:50
сломается
00:39:51
давайте запускать один
00:39:58
основался то есть конкурент модификация
00:40:03
эксепшен вообще giovanni позволяет
00:40:04
обновлять какие-либо контейнеры в тот
00:40:08
момент когда кто-то их изменяет не дает
00:40:15
но она не даёт то есть итератор оставить
00:40:18
и литератор next проверяет не изменился
00:40:22
ли в процессе исходный список если он
00:40:24
изменился то она падать
00:40:26
оказывается файл fast итератор то есть
00:40:31
быстрый упасть и все это ради того чтобы
00:40:36
гарантировать вам такую вот ну что
00:40:40
данный никто не изменяет пока вы их
00:40:41
читаете
00:40:42
потому что чтение само по себе ничего не
00:40:44
атомарные операции значит что с этим
00:40:46
делать на самом деле в прием
00:40:48
многопоточное программирование такая
00:40:49
проблема возникает достаточно часто и
00:40:51
если у вас много кто читает ваш список и
00:40:55
мало кто в него что-то добавляет то
00:41:00
зачастую ставит лог здесь до вывод будет
00:41:04
невыгодно потому что ну если поставите
00:41:09
лопнула то вы убьете всего
00:41:11
параллельности во многих случаях отца
00:41:13
потому что вам почтение без изменений
00:41:15
является безопасной там конечно есть
00:41:17
довольно интересный класс под названием
00:41:18
и the right log если вы почитаете
00:41:21
которое встанет проблема но всё равно
00:41:23
очень там лишнее поверки лишние
00:41:25
блокировки и тогда витальгар вот то что
00:41:29
вы все это избежать есть вот этот самый
00:41:30
копи унывает arraylist значит чем он
00:41:39
крут ну собственно к что жизнь названия
00:41:42
самого все понятно копи он райт
00:41:45
arraylist лист который до которые
00:41:50
копируют весь список и перезаписывание
00:41:53
царь с на если по этому списку кто-то
00:41:55
осуществляет операцию в это время то он
00:41:59
будет осуществить овацию просто по
00:42:01
старой копи она все добавления будет
00:42:04
просто тивного cooper да вы видите
00:42:07
старый
00:42:09
доу по сути вина копировать его списка
00:42:12
не такая то нет это ну условно сказать
00:42:20
можно сказать что это структура доноса
00:42:22
множество версий потому что все старые
00:42:23
версии если ссылки на них кто-то хранит
00:42:25
они сохраняются вот есть там кто-то
00:42:27
кучей сирота по старому списку то это
00:42:29
все это будет составлять список the
00:42:31
power
00:42:32
если связанный список можно использовать
00:42:35
совместно множество данных после если
00:42:39
использовать например связанный список
00:42:40
должен просто изменить где-то три
00:42:45
элемента ссылки между ними да да да
00:42:48
собственно вот этих листов да и прочих
00:42:53
столах где списке строится как красивая
00:42:56
структура до список это элемент и список
00:42:59
то тогда проблема не возникает потому
00:43:01
что казанского получаете список это один
00:43:04
из хвостов текущего списка то на
00:43:08
деревьях и тоже пользовалась только тут
00:43:09
нет никаких этапов материалов и просто
00:43:11
при добавлении вас скопирует список
00:43:13
таким образом добавление в него потока
00:43:15
безопасно так чтобы проектирование никто
00:43:20
у нас не знаешь observer подписчики
00:43:25
когда мы храним список подписчиков и в
00:43:27
великом событии всем уведомляем о
00:43:29
каком-то событии
00:43:31
вот ну представляете себе да здесь
00:43:33
события вы событиях они списке
00:43:37
подписчика не списке да вот что х не
00:43:43
список подписчиков и подумала этом
00:43:44
сообщении вот список подписчиков очень
00:43:47
хорошо хранить в copyright or else
00:43:49
потому что подписчики добавляется крайне
00:43:51
редко событие было ссылается слышно
00:43:53
часто тем не менее есть и в процессе
00:43:55
рассылки сообщений добавится в ваш
00:43:58
список подписчиков то будет очень
00:44:01
печально если что-то сломается поэтому
00:44:04
можете использовать arraylist этих
00:44:06
случаях еще пожалуй даже на самом деле
00:44:10
самая на мой взгляд популярная структура
00:44:13
данных из этого набора скифов конкуренты
00:44:16
такой момент cashmere
00:44:19
ну можно сделать из конкурент хэш мапо
00:44:22
есть волоски please set
00:44:25
а кстати тоже очень обожаемая но
00:44:26
структура данных и я боюсь его букет
00:44:28
помещение рассказывать потому что ну
00:44:32
потому что видимо все таки за рамки
00:44:34
но очень будет почитать это структура
00:44:36
данных которая
00:44:37
вероятностные 105 данных которыми я
00:44:39
просто очень радует но я не понюхать
00:44:42
восстать я хотел сказать по конкурент
00:44:44
хочу поставить себя как стоит кошмар
00:44:49
себе обычный кошмар как работает наш
00:44:53
вектор покойнику string или даже не
00:44:59
пускай будет кошмар как будет вести себя
00:45:10
хорошо пока по точной среде
00:45:12
то есть вот меня есть map и я и там из
00:45:14
нескольких потоков не учат пишу то бы
00:45:16
задал потока пишу добавляя чет одно из
00:45:31
другого потока
00:45:34
добавляющие того и будет работать и свет
00:45:40
один пример из это кругло за резко
00:45:55
скажите мне будет работать многопоточной
00:45:58
среде 1 32 так я пишу разные ищите
00:46:01
обратить внимание в этом таком ключе .
00:46:04
здесь был бы один и тот же ключ но я
00:46:07
понимаю бы сомнение но в любом случае
00:46:14
давайте кто-нибудь скажите мне советское
00:46:18
слово это даже того куда же знать даже в
00:46:20
общин окна как работает кошмар а этот
00:46:23
сок ахахах
00:46:33
по-моему я как она только кажется вас
00:46:37
кого я спрашиваю знаете работы сказали
00:46:39
что знаете так я боюсь что месяц
00:46:48
придется это рассказывать потому что в
00:46:50
противном случае фокус не получится
00:47:11
нет дать я лучше нарисую вкратце потому
00:47:15
что иначе все будет очень печально
00:47:25
значит хэш map реализует такое понятие
00:47:28
как карта что угодно домах строки в пен
00:47:36
и должен нам обеспечить доступ по
00:47:42
значит ключевых значению за единичное вы
00:47:45
хотите структура данных мы знаем которые
00:47:48
умеют обеспечивают доступ к ключу за
00:47:50
единичное время так разрезки молчит
00:47:53
массивном и знаю что массива
00:47:59
массива позволяет нам получить доступ к
00:48:01
этому элементу
00:48:04
ну не знаю я считаю или над иначе
00:48:07
получит за единичное время то есть мы
00:48:10
знаем индекс можем в любой момент
00:48:15
получить этот элемент и нам жаль и это
00:48:17
всего одна операция нато сложение
00:48:19
указательный также но проблема в том что
00:48:22
мы хотим искать не подсел в индекса мы
00:48:24
хотим искать по
00:48:26
по строке чё делать но вот то есть нам
00:48:33
нужно как то есть строки получить число
00:48:35
но больше знаем как исправьте получить
00:48:37
частот можешь знать
00:48:38
такой ну не будем пока горит фишера
00:48:45
не стоит там можно надеть
00:48:46
лекцию отдельный курс лекции по пещерам
00:48:49
рассказать как раз перед начну нужна
00:48:58
функция которая четко хочу лишнего
00:49:07
что такое hash sha городская
00:49:10
ваша версия так хэш какое представление
00:49:18
данных строка это хэш-таблицы
00:49:26
спрашиваешь нет особых с ней точно
00:49:28
должны знать я свидетелю 2 кускуса шли
00:49:31
молча то рассказывал я просто
00:49:32
присутствовал поэт я хочу тебя не мне
00:49:34
это сказали а то я буду тебя всех
00:49:37
ненавидеть но отыграюсь как обычно на
00:49:39
третьем курсе это такая хитрая функция
00:49:44
которая
00:49:45
любые данные отображает данные
00:49:48
фиксированного объема
00:49:50
последует низу байтов то фиксированного
00:49:53
объема сейчас на случай 80 за фиксированный
00:49:55
объем там не знаю четыре байта и тогда
00:49:58
будет что функция h отображает нам любой
00:50:00
объект какой угодно длины в четыре байта
00:50:04
то бишь в целое число
00:50:05
поэтому дайте тот который нашему видел
00:50:11
их нет и собственно радость о том что у
00:50:13
любого объекта джавы есть специальная
00:50:17
функция под названием хэш-код которой
00:50:20
собственно и делает хэш-код любого
00:50:23
объекта ja hotela при помощи этой
00:50:26
функции мы можем получить
00:50:28
для любого типа данных не хотела часок а
00:50:32
значит мы можем для любого типа данных
00:50:35
это любой тип данных использовать как
00:50:37
индекс массива
00:50:39
понятна идея собственно дальше по моему
00:50:42
же мне вовсе без нее как это работает
00:50:44
так из да дальше все банально если мы из
00:50:46
этого стинга получая
00:50:50
часов до
00:50:58
значит если у него хэш 105 на четком
00:51:02
такой есть то есть если
00:51:03
хэш чем хорош тем что он до для некого
00:51:07
набора байта всегда будет возвращать
00:51:09
один и тот же другой набор байтов
00:51:11
соответственно когда мы еще раз
00:51:13
передадим сюда эту строку мы получим
00:51:14
этот же номер ячейки
00:51:16
так и запишем здесь есть число которое
00:51:19
здесь у нас было и получая прекрасно
00:51:23
работающий ассоциативный массив
00:51:25
которое за единичное время нам все дает
00:51:27
так вы играете деревья деревья вопрос
00:51:32
прекрасно знаете как работает хэш
00:51:40
просканировать дома сможет угасай
00:51:44
которая равняется 5 хоккей так что
00:51:51
напоминает если б прямо на самом деле
00:51:55
нужно хранить не 8 нам нужно здесь
00:51:56
хранить целый список здесь на самом деле
00:52:02
нам от хранить исходную строку и
00:52:05
какая-то другая строка которая которая
00:52:10
имеет тот же хэш которая детям есть это
00:52:16
еще одна беда
00:52:17
вторая беда действие то у нас целое 4
00:52:20
байта в число то есть сколько у вас тут
00:52:23
может быть значений до 4 миллиарда
00:52:28
следовательно чтобы выделить но вот
00:52:30
массив
00:52:31
нам нужен сколько памяти 4 гигабайта
00:52:36
объект типа хэштег будет занимать 4
00:52:39
гигабайт оперативной памяти
00:52:41
я-то понимаю что это не есть айс поэтому
00:52:45
очень все печально поэтому короче говоря
00:52:47
на самом деле так никто не делает как
00:52:52
правило этот хэш берут мне до 4
00:52:54
миллиардов этот хэш еще там от него
00:52:56
остаток от деления на какой-нибудь
00:52:58
относительно небольшое число если
00:53:00
значение
00:53:01
слишком много то
00:53:02
часов увеличивают там всякие возникают
00:53:04
коэффициента заполнения очень хитро
00:53:07
штуки в общем платная думаю что протоку
00:53:11
стоишь вы вкратце вот так вот понятное
00:53:15
дело про всякие там открытые адресации
00:53:18
проще богус коллизии можете денег
00:53:21
почитать отдельно очень рекомендую
00:53:22
потому что если будет устраивать скую от
00:53:24
программистов и такой вопрос который я
00:53:27
бы студентов бы точность порошок потому
00:53:29
что он очень хорошо подсказывает потом
00:53:31
осока вы глубоко понимаете когда мера
00:53:32
так вот есть вот с этой штукой
00:53:36
все-таки поток один поток 2 будет эта
00:53:39
работа
00:53:41
когда у нас из двух разных потоков мы
00:53:43
хотим записать этот мотив новое значение
00:53:46
большинстве случаев я не знаю может они
00:53:53
там вопрос исключение причина своими
00:53:58
других должны но знаете мы попадаем в
00:54:02
большинстве случаев это сито и не
00:54:04
работает то есть если вы понятно из или
00:54:09
например упреждение действительно все
00:54:18
понял че сказал дальше зарезки
00:54:21
допустим попе вов с некоторой
00:54:23
вероятностью у этих двух строк может
00:54:26
быть одинаковый хеш
00:54:27
на самом деле есть здесь у нас
00:54:28
достаточно маленькое число да то есть мы
00:54:34
на сам использую не 4 миллиарда всего 20
00:54:36
значений то вероятность того что не
00:54:37
будет одинаковых ешь до весьма высока
00:54:40
совместно они попадут вот в этот список
00:54:42
в один список список обычный список
00:54:45
обычный список конкурентно
00:54:47
модифицировать плохо поэтому все запасы
00:54:50
понятна идея с дом случае вас
00:54:55
периодически вот этот коэффициент то по
00:54:57
которым мы находимся в к отделения
00:54:59
нашего хэша он может меняться и тогда
00:55:01
случается перестраивании хэши когда ваша
00:55:04
массив там мир сильно запада
00:55:05
то что вас но сильно заполнен то его
00:55:10
нужно переделать
00:55:11
стала произойдет да да да да да да я из
00:55:18
вас будет ползать перераспределение то
00:55:19
это тоже будь то же самое проблема что
00:55:21
просто форелист добавлять значения
00:55:24
короче когда все плохо че будем делать
00:55:26
70 как нам сделать
00:55:28
он работал в бок подачей среде если нам
00:55:31
все-таки надо вот это делать из был
00:55:33
потоп чтобы не делать так можем
00:55:37
залакировать например можем чтобы потом
00:55:41
когда он записывал чтобы когда он попал
00:55:43
уже существуешь и начинала запись тесто
00:55:47
на части по списку и момента должен
00:55:49
здесь блокировки ну на самом деле целая
00:55:54
банда ли еще можем сделать просто
00:55:55
наложить мьютекс и а также можно
00:56:00
наложить new такса все бьют сосен и
00:56:10
создадим мы можем так сделать все теперь
00:56:16
все потока безопасно значит пока один
00:56:18
добавляет другие ждут какой бы хочу него
00:56:20
не получилось это не важен
00:56:22
все ждут но косяк в том что разумеется
00:56:25
все будет работать медленно поскольку на
00:56:29
самом деле такие структур данных о каких
00:56:31
не там серверах используется очень очень
00:56:33
часто если пока один пользователь там
00:56:35
читает что-нибудь или записывать в базу
00:56:37
да да все остальные пользователи ждут
00:56:39
много понимаете
00:56:41
много пользоваться этим сервисом никто
00:56:43
не будет так можно просто но разные луки
00:56:47
и можно лошадь слойки как определенные
00:56:51
списке мы можем наложить залоге например
00:56:54
наветов которые вызывают расширение да
00:56:57
значит вот эти мы можем как с этим
00:56:59
бороться
00:57:00
один из самых простых способов на самом
00:57:02
деле внутри этого депо использовать не
00:57:06
один большой массив а использовать много
00:57:09
маленьких массивов
00:57:15
так называемые сегменты
00:57:23
здесь там хранить хэши там от 1 до 200
00:57:27
здесь там 201 тогда 400 и так далее
00:57:31
говорит тогда по крайней мере то есть те
00:57:39
стоите у которых хороши будут
00:57:44
из разных сегментов по крайней мере не
00:57:46
буду долго мешать
00:57:47
понятна идея ну если есть они попали в
00:57:54
один сегмент или есть еще хуже у них
00:57:58
одинаковый хеш вот тогда да тогда она
00:58:00
обойдется запустить лог но вы можете
00:58:02
заметить это будет происходить гораздо
00:58:04
реже если мы разобьем и достаточное
00:58:06
количество сигда то есть соревноваться
00:58:12
за хэш будет гораздо меньше объема самом
00:58:15
деле это типичная ситуация для любых
00:58:20
распределенных систем так называемый
00:58:22
шарли
00:58:23
когда бы часть пользователей храним в
00:58:26
одной базе данных часть пользователей в
00:58:35
котором попал в одну часть да как-то не
00:58:36
бо тети которые пояснение
00:58:39
блокируйте ну да хотя там тоже несколько
00:58:43
более идет там не просто блокировать все
00:58:49
подряд там сидит на позволит более
00:58:52
способом вот есть абсолют эта концепция
00:58:55
реализован current cash которая только
00:58:58
что пытался рассказать в чем смысл
00:59:00
ограничивать ну да все достаточно
00:59:05
вращение ограничиться лишь
00:59:11
перестройки
00:59:15
перестройку
00:59:16
ну вот там все так и сделала там забрать
00:59:18
там блок на действия че
00:59:23
если можно брать один список это три при
00:59:27
значений ну а перестройках
00:59:30
перестройка просто sky перестроить
00:59:35
блокируется далее по пути вы используете
00:59:38
вот покупка в каком селе вал собственно
00:59:41
это и есть тот параметр которая потеряет
00:59:43
но не то чтобы точно определяет например
00:59:45
определяет а сколько сегментов нужно
00:59:47
будет разбивать этот самый нет ну да в
00:59:50
принципе он представляет сола блокировка
00:59:52
будет столько на внутренние ребята там
00:59:55
вы активно используете атомарные
00:59:57
операции то почему достаточно уметь
00:59:59
чтобы блокировка включать только тогда
01:00:00
когда на
01:00:01
так что там все не так просто

Описание:

00:00 - атомарность 02:01 - Compare and Set и AtomicInteger 29:13 - getAndUpdate 32:39 - AtomicReference 36:11 - ConcurrentLinkedQueue и ConcurrentLinkedDeque 36:56 - CopyOnWriteArrayList 44:09 - ConcurrentHashMap Подписывайтесь на канал SplinCodeWD: ★★★★★★★★★★★★★★★★★★★★★★★ На моем канале вы можете найти видеоуроки по C/C++/HTML/CSS/JS/PHP, аудиоподкасты и разборы статей с хабра, и многое другое. Подписывайтесь, вместе мы сможем преодолеть трудности. ★★★★★★★★★★★★★★★★★★★★★★★ Подпишись: https://www.youtube.com/c/splincodewd Материалы по видеоурокам тут: ★★★★★★★★★★★★★★★★★★★★★★★ Ссылка: https://github.com/splincode/basework Если хотите поддержать проект: ★★★★★★★★★★★★★★★★★★★★★★★ Проект SplinCodeWD: http://splincode.github.io/course/ Я вконтакте: https://vk.me/splincode Паблик: https://new.vk.com/splincode_public Мое портфолио: https://splincode.github.io/ Безлимитный хостинг: https://hostliga.ru/ Твиттер: https://twitter.com/splincodewd Пожертвование: https://money.yandex.ru/to/410011651364842

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Java. Урок 8. Атомарные операции. Конкурентые коллекции"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Java. Урок 8. Атомарные операции. Конкурентые коллекции" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Java. Урок 8. Атомарные операции. Конкурентые коллекции"?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "Java. Урок 8. Атомарные операции. Конкурентые коллекции" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Java. Урок 8. Атомарные операции. Конкурентые коллекции"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Java. Урок 8. Атомарные операции. Конкурентые коллекции"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

  • Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.