1. 线程间协作方式
    1. 使用继承自超类Object的方法wait、notify、notifyAll
    2. 使用Condition
  2. 实现线程同步 和安全
    1. 关键两点特性
      1. 内存可见性
      2. 访问有序性
    2. 实现方法:
      1. volatile关键字
        1. 一般用于变量上,使得直接从内存(即主内存)中访问变量的值而不去缓存(工作内存)中访问
        2. 实现了内存可见性,性能开销比synchronized低,但不保证原子性、访问有序性
      2. synchronized
        1. 用于同步方法或同步块
        2. 每次保证只有一个线程能访问同步方法或同步块
        3. 性能开销大
        4. 实现了内存可见性和访问有序性
      3. Locks包
        1. ReentrantLock
        2. ReentrantReadWriteLock
      4. atomic
        1. 保证原子性
    3. 一些线程安全类和并发工具
      1. 同步容器
        1. Vector
        2. Stack
        3. HashTable
        4. Collections类提供的静态工厂方法创建的类
        5. 使用synchronized进行同步
      2. 并发容器
        1. CopyOnWriteArrayList
        2. CopyOnWriteArraySet
        3. ConcurrentHashMap
      3. 阻塞队列
        1. ArrayBlockingQueue
        2. LinkedBlockingQueue
        3. PriorityBlockingQueue
        4. DelayQueue
      4. 并发辅助类
        1. CountDownLatch
        2. CyclicBarrier
        3. Semaphore
  3. 其他
    1. ThreadLocal
    2. 线程转储
    3. fork/join框架
    4. 死锁
    5. Java内存模型
    6. 经典问题
      1. 生产者与消费者问题
      2. 哲学家就餐问题
    7. 线程安全的singleton(单例模式)
  4. 使用线程池
    1. Executors框架
    2. ThreadPoolExecutor
  5. 创建线程
    1. 1
      1. 继承Thread类
      2. 实现Runnable接口
      3. 缺点:在执行完任务之后无法获取执行结果,可以使用2解决这个问题
    2. 2
      1. Callable、Future、FutureTask