Понимание базовой многпоточности презентация

Содержание

Обо мне Artem Larin Senior Java Developer at

Слайд 1Понимание базовой многопоточности


Слайд 2Обо мне
Artem Larin
Senior Java Developer at


Слайд 3Когда я читаю многопоточный код…
public synchronized int getSyncA() {

Thread t1 =

new Thread() {
public void run() {
synchronized (one) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {

t1.start();
Thread.sleep(200);
t2.start();

Слайд 4Я вижу это…


Слайд 5Когда я думаю о многопоточном коде…


Слайд 6Где же «секретное оружие»?


Слайд 7Бесконечный список книг?


Слайд 8Сакральное знание?


Слайд 9Ключи к пониманию базовой многопоточности
Секретное оружие №1
Секретное оружие №2


Слайд 10Секретное оружие №1
Это знание машины состояний потока


Слайд 11Коне́чный автома́т — абстрактный автомат, число возможных внутренних состояний которого конечно (!).



Слайд 13Машина состояний потока
Состояния
Переходы
События


Слайд 14Машина состояний потока


Слайд 15Машина состояний потока


Слайд 16Машина состояний потока


Слайд 17Как читать диаграмму? Правило №1
Надпись над стрелкой –
это вызов метода на

объекте потока

Слайд 18Например
Thread t1 = new Thread() {…}
t1.start();


Слайд 19Как читать диаграмму? Правило №2
В один момент времени поток
находится в одном состоянии.


Слайд 20Как читать диаграмму? Правило №3
Поток не имеет других
состояний и переходов.


Слайд 21Секретное оружие №2
Это переход в другое измерение времени
(как в фильме «Прибытие»)


Слайд 22Мы пытаемся понять код в чужом временном измерении


Слайд 23-> 37 m:R
38 -> t:N
40 -> t:R
А нужно расписать переходы потоков
на

псевдоязыке
последовательно во времени,
как видят время обычные люди

Слайд 24Что за «псевдоязык»?
-> 37 m:R (эта запись означает, что при переходе управления

на строку 37 главный поток main (сокращенно m), переходит в состояние Runnable) 38 -> t:N (при передаче управления с 38 строки поток t переходит в состояние New) 40 -> t:R (при передаче управления с 40 строки поток t находится в состоянии Runnable, потому что был вызван метод t.start())

Слайд 25Что за «псевдоязык»?
-> 37 m get(obj1) (при переходе управления на строку 37

главный поток main захватил монитор объекта obj1)

37: synchronized (obj1) {
….
}

Слайд 26Что за «псевдоязык»?
39 -> m rel(obj1) (при переходе управления со строки 39

главный поток main отпустил монитор объекта obj1)

synchronized (obj1) {
….
39: }

Слайд 27При этом не забываем правила!
В один момент времени поток
находится только в

1 состоянии!





«Фишка» потока 1

«Фишка» потока 2


Слайд 28
Не нужно описывать каждую строчку кода. Указывайте только те, в которых

происходят изменения состояния какого-либо потока.

Слайд 29Закрепим навыки


Слайд 31Другие способы определения дедлоков
JDK: jps/jstack
OpenJDK: JCStress (Алексей Шипилев)


Слайд 32Другие кейсы
join/sleep
wait/notifyAll


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика