《Java 并发编程实战》 - 第5章:基础构建模块

180 阅读2分钟

8.29

@(Java 笔记)[JAVA, 集合]

阻塞队列(可以实现生产者-消费者模式),take 和 put 方法阻塞
  1. LinkedBlockingQueue: LinkedList
  2. ArrayBlockingQueue: ArrayList
  3. PriorityBlockingQueue: 优先级队列
  4. SynchronousQueue: 不是真正的队列:洗好的盘子直接放入烘干机
  5. Deque
  6. BlockingDeque
  7. 利用阻塞队列可以实现线程封闭:对象池
  8. 工作密取:当前消费者完成了自己的任务,秘密从别的消费者的任务队列中获取任务
阻塞方法与终端方法
  1. 等待 io 结束
  2. 等待锁
  3. sleep方法中醒来
  4. 等待另一个线程结果
  5. 处理中断的方式: a.传递:把 InterruptedException 传递给方法调用者 b. 恢复中断
同步工具类
  1. 阻塞队列
  2. 信号量
  3. 栅栏:类似于闭锁,能够阻塞一组线程直到某个事件发生。
  4. 闭锁:延迟线程进度,直到达到其最终状态。在闭锁到达结束之前,门一直关着的,没有任何线程能通过。到达结束状态时,门打开,允许所有线程通过,且一直打开。可以确保某些活动直到其他活动完成后才继续执行
  • CountDownLanch 是一种闭锁,闭锁状态包括一个计数器,初始化为正数,表示要等待的事件数量。每调用CountDown方法,计数器递减。awit 方法等待计数器达到 。开始门:线程在开始门前等待所有线程就绪。结束门:...。可以统计消耗时间。
  • FutureTask: 相当于可生成结果的 Runnable,有等待运行,正在运行和完成运行三种状态。完成运行包括:正常结束,由于取消而结束,由于异常而结束。Future.get获取运行结果,未完成运行的阻塞。
  • Semaphore信号量。
Semaphore sem = new Semaphore(bound); // bound: 信号量大小
sem.acquire(); // 获取信号量
finally {
sem.release();} // 释放
  1. 创建自己的同步工具类