Многопоточность в Java
Потоки и synchronized, Java Memory Model и volatile, атомарные операции, явные блокировки, пулы потоков и CompletableFuture, координация и виртуальные потоки.
Уроки
11- 01Потоки: создание, состояния и отмена
Thread и Runnable, стоимость платформенных потоков, состояния жизненного цикла, кооперативное прерывание и daemon-потоки.
- 02synchronized, мониторы и wait/notify
Взаимное исключение и видимость через монитор, reentrancy, guarded blocks с wait/notify и причины deadlock.
- 03Java Memory Model: happens-before и volatile
Зачем нужна модель памяти, видимость и переупорядочивание, отношение happens-before, семантика volatile и final, гонки данных.
- 04volatile, атомарность и CAS
Разница видимости и атомарности, atomic-классы, compare-and-swap и ABA, контеншн и LongAdder.
- 05Явные блокировки: ReentrantLock, RW и Condition
Когда synchronized мало, ReentrantLock с tryLock/fairness, ReadWriteLock и StampedLock, Condition вместо wait/notify.
- 06Пулы потоков и ExecutorService
Зачем пул, параметры ThreadPoolExecutor, ловушки фабрик Executors, выбор размера и корректное завершение.
- 07Future и CompletableFuture
Ограничения Future, асинхронная композиция CompletableFuture, async-варианты с пулами и обработка ошибок.
- 08Координация: семафоры, защёлки и барьеры
Semaphore, CountDownLatch, CyclicBarrier, Phaser и Exchanger — что каждый делает и когда выбирать.
- 09ThreadLocal и Fork/Join
Состояние на поток и утечки в пулах, InheritableThreadLocal, work-stealing в ForkJoinPool и общий пул parallel streams.
- 10Конкурентные коллекции
ConcurrentHashMap без сегментов (CAS + блокировка бакета), запрет null, CopyOnWriteArrayList и BlockingQueue.
- 11Виртуальные потоки (Project Loom)
Лёгкие потоки JVM, монтирование на carrier, когда их применять, почему не пулят и проблема pinning.
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.