Basic concepts: concurrent activities, busy-wait and polling, synchronization and communication, atomic operations such as test-and-set, and mutual exclusion.
Synchronization and signaling in shared-memory applications: locks, monitors.
Synchronization and signaling in message-passing applications.
Concurrency in interactive systems with callbacks.
Analysis of deadlock and livelock.
Central aspects of the Java concurrent package, such as locks, semaphores, thread pools, atomics, and blocking queues.
Overview of real-time operating systems, scheduling, multicore hardware, lock-free algorithms. Brief introduction to more advanced frameworks in the Java concurrent package.