1. BIO/NIO/AIO演变
Java IO 方式有很多种,基于不同的IO抽象模型和交互方式,可以进行简单区分。
Queue接口
|———— BlockingQueue接口
|———— ArrayBlockingQueue类
|———— DelayQueue类
|———— LinkedBlockingQueue类
|———— PriorityBlockingQueue类
|———— SynchronousQueue类BlockingQueue继承了Queue接口,提供了一些阻塞方法,主要作用如下:
BlockingQueue在Queue方法基础上增加了两类和阻塞相关的方法:put(e)、take();offer(e, time, unit)、poll(time, unit)。| 操作类型 | 抛出异常 | 返回特殊值 | 阻塞线程 | 超时 |
|---|---|---|---|---|
| 插入 | add(e) | offer(e) | put(e) | offer(e, time, unit) |
| 删除 | remove() | poll() | take() | poll(time, unit) |
| 读取 | element() | peek() | / | / |
put(e)和take()**方法会一直阻塞调用线程,直到线程被中断或队列状态可用;offer(e, time, unit)和poll(time, unit)**方法会限时阻塞调用线程,直到超时或线程被中断或队列状态可用。ArrayBlockingQueue是一个有边界的阻塞队列,它的内部实现是一个数组。
在java.util.concurrent包中,提供了两种类型的并发集合:一种是阻塞式,另一种是非阻塞式。
ArrayList –> Vector,StackHashMap –> HashTable(key、value不能为null)Collections.synchronizedXXX(List/Set/Map) //本质是对相应的容器进行包装,通过在方法中加synchronized同步锁来实现synchronized修饰。性能开销大。ArrayList –> CopyOnWriteArrayList:保证**最终一致性,写时复制,适用于读多写少**的并发场景HashSet、TreeSet –> CopyOnWriteArraySet、ConcurrentSkipListSet:HashMap、TreeMap –> ConcurrentHashMap、ConcurrentSkipListMap:CopyOnWrite(简称COW),是计算机程序设计领域中的一种优化策略,也是一种思想–即写入时复制思想。