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