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