读书笔记。

线程安全性

正确性:最核心的概念。这个和个人理解的一致,就是某个类的行为与其规范完全一致。如果某个类在多线程下的结果与单线程下一致,那可以认为是线程安全的。

设计线程安全的类

在设计过程中,包含三个基本要素:

  • 找出构成对象状态的所有变量
  • 找出约束状态变量的不变性条件
  • 简历对象状态的并发访问管理策略

以上也符合面向对象编程的基本原则:封装变化。

###同步:

  • BlockingQueue
  • Semaphore
  • CountDownLatch
  • wait、 notify
  • Barrier

线程池

Executors工具类:

  • newFixedThreadPool 固定长度的线程池
  • newCachedThreadPool 可缓存(伸缩)的线程池,规模不受限制
  • newSingleThreadExecutor 单线程的Executor.异常结束会自动创建新线程代替
  • newScheduledThreadPool 延迟的执行任务,固定长度

任务取消

ReentrantLock extends Lock

  • 获取

    Lock lock = new ReentrantLock();
    ...
    lock.lock();
    try {
    // 更新状态
    // 捕获异常
    } finally {
    lock.unlock();
    }
  • 释放锁

    必须在finally块中释放Lock,不然就惨了。

    性能:性能是一个不断变化的指标,如果在昨天的测试基准中发现X比Y更快,那么在今天就可能已经过时了。