Этап 6 из 11

Многопоточность

Основа

Потоки и синхронизация, Java Memory Model, пулы, CompletableFuture, конкурентные коллекции и виртуальные потоки.

Многопоточность — вторая по частоте тема Java-собеседований и главный источник трудных багов в продакшене. Для middle ждут уверенного владения пулами, CompletableFuture, конкурентными коллекциями и понимания, почему нужен volatile. Для senior — Java Memory Model, диагностику взаимных блокировок и виртуальные потоки.

Темы этапа

Вопросы с собеседований

Смотреть все
Чем Thread, Runnable и Callable отличаются?Junior

Thread — сам поток выполнения. Runnable — задача без результата (void run()), Callable<V> — задача с результатом V call(), которая может бросить проверяемое исключение.

Полный разбор
Что гарантирует ключевое слово volatile для переменной?Middle

volatile даёт видимость (запись сразу видна другим потокам) и запрет переупорядочивания вокруг обращения, но не атомарность: count++ на volatile-поле всё равно теряет обновления.

Полный разбор
Что такое Fork/Join framework и work stealing?Senior

Fork/Join — рекурсивное деление задачи на подзадачи (fork) с последующим объединением результатов (join). Work stealing: у каждого рабочего потока своя двусторонняя очередь, а освободившийся поток крадёт задачи с хвоста чужой очереди — нагрузка балансируется…

Полный разбор
Чем вызов start() у потока отличается от прямого вызова run()?Junior

start() создаёт новый поток, и уже он вызывает run(); прямой run() выполняется в текущем потоке, как обычный метод.

Полный разбор
Чем volatile отличается от synchronized?Middle

volatile — видимость и порядок для одной переменной без блокировки. synchronized — видимость плюс взаимное исключение: блок целиком выполняется одним потоком, поэтому составные действия становятся атомарными.

Полный разбор
Почему опасно выполнять блокирующие операции в стадиях CompletableFuture без явного Executor?Senior

Async-стадии без Executor выполняются в ForkJoinPool.commonPool — он общий на всю JVM и размером примерно число ядер − 1. Блокирующие вызовы (HTTP, БД, get чужого future) занимают его потоки, и встаёт всё, что им пользуется: другие цепочки, parallel stream…

Полный разбор

Разборы темы

← Вся карта «Java»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования