Багатопотоковість у Java: курс із шести лекцій

18 серпня
Java-розробник Володимир Фролов, Android-розробник Микита Сізінцев
Багатопотоковість у Java: курс із шести лекцій
Минулого року наші колеги, Java-розробник Володимир Фролов та Android-розробник Микита Сізінцев, склали короткий курс із багатопотоковості у Java з шести лекцій. Ми опублікували його на сайті DataArt та отримали чудові відгуки. Тепер зібрали всі лекції разом, щоб показати тим, хто приєднався до нас нещодавно, та нагадати всім іншим.

ЛЕКЦІЯ 1: ЗАГАЛЬНІ ВІДОМОСТІ

У першій лекції нашого курсу розглядаються: робота процесора, підтримка процесів і потоків у операційних системах, основні поняття й визначення багатопотоковості, відмінності між процесами та потоками.

ЛЕКЦІЯ 2: ПОТОКИ ТА ЇХНІ ВЛАСТИВОСТІ, БЛОКУВАННЯ

У другій лекції йдеться про засоби роботи з багатопотоковістю та основи багатопотокових програм — створення, запуск, властивості, стани та синхронізацію, зупинку і переривання потоків; volatile змінні та відношення happens-before. У лекції наведені приклади коректного використання ключового слова synchronized та пояснюється, чим загрожує його неправильне використання.

ЛЕКЦІЯ 3: БЛОКУВАННЯ ТА КЛАСИ СИНХРОНІЗАЦІЇ ПОТОКІВ

Із появою Java 1.5 було додано пакет java.util.concurrent, що містить інструменти для роботи в багатопотоковому середовищі, зокрема блокування та колекції. Лекція 3 присвячена блокуванням та іншим методам синхронізації потоків.

ЛЕКЦІЯ 4: ПУЛИ ПОТОКІВ

Створення потоків для виконання великої кількості задач є дуже трудомісткою справою: створення потоку та звільнення ресурсів — дорогі операції. Для розв’язання проблеми ввели пули потоків і черги задач, з яких беруться задачі для пулів.

У четвертій лекції розглянули пули потоків Runnable і Callable, інтерфейс Threadfactory, клас Threadpollexecutor, фреймворк Fork/Join Poll, скасування задач у Executors та обробку винятків.

ЛЕКЦІЯ 5: АТОМАРНІ ЗМІННІ ТА БАГАТОПОТОКОВІ КОЛЕКЦІЇ

У Java є колекції, призначені для використання в багатопотоковому середовищі, які реалізують різні механізми синхронізації даних. До виходу Java 1.5 існували багатопотокові колекції Stack, Vector і HashTable. У Java 1.2 з'явився утилітний клас Collections, що надає статичні методи для обертання стандартних колекцій у їхні синхронізовані представлення.

Передостання п'ята лекція — про атомарні змінні, багатопотокові колекції, статистичні методи класу Collections, Copy on write і Skip list структури даних, інтерфейс Blockingqueue та багатопотокові реалізації інтерфейсу Map.

ЛЕКЦІЯ 6: ВЗАЄМНІ БЛОКУВАННЯ ТА ДАМПИ ПОТОКІВ

У некоректно спроектованій багатопотоковій програмі два потоки можуть блокувати один одного. У цьому випадку їхнє виконання зависає, доки програму не зупинять ззовні. Така ситуація називається deadlock. У заключній лекції автори курсу розібрали дампи потоків, просте взаємне блокування, прихований дедлок та Livelock.

  • Україна, Remote.UA; Україна, Дніпро; Україна, Київ; Україна, Львів; Україна, Одеса; Україна, Харків; Україна, Херсон
    31 грудня