Содержание
- 2. Обо мне Artem Larin Senior Java Developer at
- 3. Когда я читаю многопоточный код… public synchronized int getSyncA() { … Thread t1 = new Thread()
- 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
- 25. Что за «псевдоязык»? -> 37 m get(obj1) (при переходе управления на строку 37 главный поток main
- 26. Что за «псевдоязык»? 39 -> m rel(obj1) (при переходе управления со строки 39 главный поток main
- 27. При этом не забываем правила! В один момент времени поток находится только в 1 состоянии! «Фишка»
- 28. Не нужно описывать каждую строчку кода. Указывайте только те, в которых происходят изменения состояния какого-либо потока.
- 29. Закрепим навыки
- 31. Другие способы определения дедлоков JDK: jps/jstack OpenJDK: JCStress (Алексей Шипилев)
- 33. Скачать презентацию