标题 | jdk5的并发库 |
内容 | 一、传统集合 collection: list:ArrayList LinkedList Vector Stack set:HashSet TreeSet Map:HashMap TreeMap 二、简单的不再多说,只说不会的! 1、Vector: 默认创建大小为10的Object数组(所以是基于数组实现的) add, remove方法都是添加了 synchronized关键字的 所以线程安全 vector 扩大数组 是扩大两倍 线程安全 ArrayList 扩大 *1.5+1 线程不安全 2、Stack : 先进后出 继承于Vector,所以也是线程安全的! push pop peek 3 HashSet 基于HashMap实现,使用的是hashMap中的Key, 无容量限制 ,非线程安全 TreeSet 基于TreeMap实现, 支持排序 ,非线程安全 4 HashMap 基于Entry数组实现, key,value 后出entry, 无容量限制,非线程安全 TreeMap 基于 红黑树实现,无容量限制,非线程安全 三、各种实现方式 ArraylIst 数组 linkedList 双向 链表 Vector 数组 Stack 数组 HashSet 基于HashMap实现 TreeSet 基于TreeMap 实现 HashMap 基于Entry对象的数组实现 TreeMap 基于 红黑树实现 四、传统集合的一些性能 1、set 和 map 类型的查找是通过hash后,再到链表上查找,所以速度相对来说要快! 2、当数量超过万级别: 插入:arrayList Vector的影响比较大,其他基本没什么变化 查找和删除;list 的性能下降比较严重,set和map基本不受影响 五、并发集合 以下都是线程安全的: ConcurrentHashMap 在每一个分段上都用锁进行保护,从而让锁的粒度更精细一些,并发性能更好,而HashMap没有锁机制,不是线程安全的。 CopyOnWriteArrayList 在读写操作无锁的 ArrayList CosyOnWriteArraySet 基于CopyOnWriteArrayList实现 ArrayBlockingQueue 基于数组,先进先出,阻塞读写 ArrayBlockingQueue(int capacity)创建一个带有给定的(固定)容量和默认访问策略的 ArrayBlockingQueue。同时初始化锁和两个锁上的condition,一个为notEmpty 一个为notFull 六、原子操作 AtomicInteger AtomicLong AtomicBoolean 七、Executors newCachedThreadPool() 创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。 newFixedThreadPool(int nThreads) 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。 newSingleThreadExecutor() 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。 newScheduledThreadPool(int corePoolSize) 创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。 适合于:定时或者延迟的任务,在异步操作中需要 超时回调的场景 |
随便看 |
|
在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。