Тёмный

МФТИ Core Java 2020 Лекция 10 

Ivan Ponomarev
Подписаться 2,5 тыс.
Просмотров 6 тыс.
50% 1

Java Concurrency - часть 1

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

 

10 ноя 2020

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 9   
@aleksandrzavoykin5587
@aleksandrzavoykin5587 3 года назад
Внятно, ясно, без воды. Огромное спасибо!
@statuxia
@statuxia Год назад
0:37 - Concurrency - конкуретное выполнение 3:00 - Где мы можем получить выгоду от concurrency? 4:52 - Где мы НЕ можем получить выгоду от [увеличения] concurrency? 5:48 - Закон Амдала (Amdahl's law) 6:56 - Амдал: Поведение (Граф) 8:02 - На самом деле, все еще хуже! 9:35 - USL: Поведение 11:20 - Промежуточный вывод 12:38 - Часть 1. Зачем нужна и как достигается синхронизация 13:05 - Многопоточность в Java (с самой первой версии!) 14:50 - Запуск параллельных вычислений через Thread API 16:22 - Проблемы с shared state 16:39 - Race condition 18:55 - Stale values 22:05 - Reordering 24:10 - Промежуточные выводы. 26:30 - Модель памяти 27:39 - Happens-before 28:48 - Program order rule 29:32 - Thread start & thread terminate rule 30:59 - Ключевое слово volatile 33:27 - Чиним stale value при помощи volatile 34:29 - final-поля 38:10 - Неатомарные операции: final не годится, volatile не спасет 40:25 - Что же делать? Синхронизированное выполнение 42:19 - Блокировки 44:15 - JMM Monitor Lock Rule 45:24 - В чем проблема здесь? 46:24 - В чем проблема здесь? 47:29 - Condition Objects 51:41 - Condition Objects: что происходит? 52:42 - Контрольный вопрос 53:11 - Правильный паттерн ожидания condition 53:38 - Intrinsic lock 54:16 - То же самое, с помощью intrinsic lock 56:39 - Synchronized-блок 58:52 - Промежуточный итог по intrinsic conditions 1:00:17 - Теперь нам понятен смысл всех возможных состояний треда 1:01:48 - Промежуточный итог по всему вышесказанному 1:03:45 - Часть 2. Deadlocks 1:03:51 - Deadlock: простой пример 1:05:09 - Перепутанный порядок блокировки 1:06:05 - Перепутанный (иногда!) порядок блокировки 1:08:10 - Выводы
@statuxia
@statuxia Год назад
Привет тому, кто читает этот комментарий. Это таймкоды, которые я ставил для себя, когда разбирал лекции. Я решил поделиться ими со всеми. Возможно они кому-то помогут. Спасибо за внимание.
@sargongamer64
@sargongamer64 2 года назад
Сложно, но интересно.
@stavatar28
@stavatar28 2 года назад
Здравствуйте.У меня вопрос насчет volatile В разных источниках пишут еще пару вещей насчет этого,которых в вашей лекции не было 1)Оно гарантирует порядок операций.Имеется ввиду,что Jit-компилятор в целях оптимизации может поменять местами операции 2)Делает атомарными операции чтения и записи для Double и Long на 32 разрядных системах Верно ли это все?ПРосто в одних источниках пишут одно,а в других - другое
@inponomarev
@inponomarev 2 года назад
1. Ну формулировка "Jit-компилятор в целях оптимизации может поменять местами операции" не имеет отношения к реальности, JIT ничего не меняет. Речь идёт о наблюдаемом изменении порядка операций из-за эффектов кэша и оптимизаций в процессоре. Доступ к volatile переменным действительно гарантирует так называемый happens-before порядок (кажется в лекциях я раскрываю определение happens-before порядка), но полагаться на этот эффект использования volatile --плохая практика (опять же, в лекции я где-то я об этом говорю и поясняю почему). 2. Да, это действительно так, хотя в наше время 32-разрядную систему поискать ))
@user-vg5cu8yp9l
@user-vg5cu8yp9l 3 года назад
Вот, вы говорили, что таким примитивным способом мы не будем создавать блокировки для частей кода. Но, не могу я оставить всё как есть! Я не понимаю, когда необходимо использовать для блокировки класс ReentrantLock, когда код надо синхронизировать код с помощью this-объекта, переданного в synchronized блок, а когда с помощью независимого объекта Object. Если вас не затруднить, объясните пожалуйста.
@user-vg5cu8yp9l
@user-vg5cu8yp9l 3 года назад
В книге Хростманна говорится, если я правильно понял, что ReentrantLock используется, когда необходимо несколько Condition в синхронизированном блоке кода, а в противном случае можно обойтись synchronized блоком. Но на вторую часть вопроса я не знаю ответа, хоть я и искал ответ на этот вопрос, но чёткой разницы я не смог уловить.
@_Vertan_
@_Vertan_ 3 года назад
На сколько я понял из приведённого примера, блокировка с помощью внешнего Object предпочтительней тогда, когда мотитор this может быть захвачен где-то ещё, но при этом смысл текущей блокировки лишь в том, что бы обеспечить атомарность какай-то оперции не завязанной на this.
Далее
МФТИ Core Java 2020 Лекция 11
1:24:32
Просмотров 6 тыс.
МФТИ Core Java 2020 Лекция 13
1:27:58
Просмотров 5 тыс.
I Built a SECRET Soccer Field in My Room!
24:15
Просмотров 14 млн
Многопоточность в Java: основы
1:23:05
Чего ожидать от HTTP/3 + Go
51:07
Kafka Streams: лекция  1 2022-10-10
1:06:00
Просмотров 9 тыс.
МФТИ Core Java 2020 Лекция 12
1:25:18
Просмотров 5 тыс.
МФТИ Core Java 2020 Лекция 14
1:24:56
Просмотров 5 тыс.
Introduction to the Java Memory Model
48:06
Просмотров 20 тыс.
Тагир Валеев - Причуды Stream API
1:00:03