4.1 Введение в понятие многопоточного программирования.
4.2 Интерфейс Runnable. Класс Thread.
4.3 Понятие Java Memory Model. Отношение happens-before. Volatile переменная. 4.4 4.4 Операция инкремента.
4.5 Синхронизация потоков. Synchronized. Wait(), Notify(). Шаблон Producer-Consumer.
4.6 Ошибки многопоточности: deadlock, race condition. Способы идентификации ошибок многопоточности.
4.7 Обзор пакета java.util.concurrent. Основные интерфейсы и классы: Lock(), ReentrantLock(), Executor, ExecutorService, ScheduledExecutorService, Future, Callable.
4.8 Потокобезопасные коллекции: ConcurrentHashMap, CopyOnRightArrayList, BlockingQueue, etc.
4.9 Синхронизаторы: CountDownLatch, CyclicBarrier, Exchanger, Semaphore ,Phaser
Atomic переменные.