21 Multithreading and Concurrency

21.1 The Multicore Future

21.2 Basic Threads

    21.2.1 Problems with Threads

        21.2.1.1 Race Conditions

        21.2.1.2 Deadlock

    21.2.2 Synchronization

    21.2.3 Wait/Notify

    21.2.4 Other Thread Methods

21.3 Concurrency Library

    21.3.1 Executors and Executor Services

    21.3.2 Callable and Futures

    21.3.3 Parallel Data Structures

        21.3.3.1 Shared Barriers

        21.3.3.2 The Exchange

        21.3.3.3 Assembly Line

        21.3.3.4 Ticketed Passengers

        21.3.3.5 Other Threadsafe Types

    21.3.4 Atomic (java.util.concurrent.atomic)

    21.3.5 Locks (java.util.concurrent.locks)

21.4 Parallel Collections

21.5 Introduction to Scala Actors

21.6 Multithreaded Mandelbrot (Project Integration)

21.7 Multithreading in GUIs

21.8 Animated Bouncing Balls (Project Integration)