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