• 并发类容器


    1.ConcurrentMap

    (1)ConcurrentMap两个重要的实现:ConcurrentHashMap和ConcurrentSkipListMap(支持并发排序,弥补ConcurrentHashMap,类似TreeMap)

    (2)ConcurrentHashMap与HashTable底层实现的不同

    a.HashTable在进行增删改的时候,会把整个对象锁起来,不允许其他线程修改

    b.ConcurrentHashMap里,有个segment的概念(意即分段),ConcurrentHashMap会分成很多段(最多支持16段),线程A修改段1的数据,不会影响线程B修改段2的数据。ConcurrentHashMap的粒度更细,所以比HashTable有更高的性能

    (3)ConcurrentHashMap底层使用了大量的volatile关键字

    2.Copy-On-Write容器,简称COW,是一种用于程序设计中的优化策略

    (1)JDK的COW容器有2种:CopyOnWriteArrayList和CopyOnWriteArraySet

    (2)COW在写入数据时,不直接往容器里写,而是先将当前容器进行Copy,复制出一个新的容器,然后往新的容器写入数据,操作完后,再将原容器的引用指向新容器。这样做的好处是可以对COW容器进行并发读而不需要加锁,因为当前容器不会添加任何袁术。COW修改操作时,会有一把锁,只允许一条线程操作

    COW容器的设计原理是读写分离

    (3)适用场景:读多写少的场景

    3.并发Queue

    (1)JDK提供了2套并发队列的实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,2种都继承自Queue

     (2)ConcurrentLinkedQueue

    a.是一个适用于高并发场景下的对了,通过无锁的方式,实现高并发状态下的高性能,通常来说,性能好于BlockingQueue

    b.队列遵循先进先出的原则

    c.队列不允许有null元素

    d.重要方法:

    add()和offer()都是加入元素的方法(ConcurrentLinkedQueue中没任何区别)

    poll():取出并删除头元素

    peek():取出头元素节点

    (3)BlockingQueue:有5种实现

    offer与add的区别:在长度限定的情况下,如果增加元素时,超过限制,add方法会报错,offer方法不会,只是增加不成功

    a.ArrayBlockingQueue

    基于数组的阻塞队列实现,内部维护了一个定长数组,以便缓存队列的数据对象,内部没实现读写分离(即生产和消费不能完全并行),长度需要自定义,可以指定先进先出还是先进后出,有界队列

    b.LinkedBlockingQueue

    基于链表的阻塞队列,跟ArrayBlockingQueue类似,内部维护一个链表组成的缓冲数据队列,能高并发处理数据,运维内部采用分离锁,消费者和生产者能完全并行,无界队列

    c.PriorityBlockingQueue

    基于优先级的阻塞队列(优先级通过构造函数传入的Compator对象来决定),内部实现时,内部的控制线程同步的锁采用的是公平锁,无界队列

    注意:其实PriorityBlockingQueue底层并没有排序,实现的原理是,一开始把优先级最高的放在队列头,获取元素时,就把元素获取出来并删除,然后把剩余里优先级最高的放在队列头(take方法)。原因是添加一次就排一次序很消耗性能

    d.DelayQueue

    带有延迟时间的Queue,其中的元素只有当其指定的延迟时间到了,才能在队列中获取到。DelayQueue必须实现Delayed接口,并且该队列没大小限制,应用场景很多,比如对缓存超时的数据进行移除、任务超时处理、空闲链接的关闭等等

    e.SynchronousQueue

    一种没有缓冲的队列,生产者产生的数据会直接被消费者获取并消费

    注意:这种类型的队列,调用add方法不是往队列里塞东西,这种队列是没容量的,一定要有个线程有take方法,才能调add方法




  • 相关阅读:
    Struct2_使用Ajax调用Action方法并返回值
    Eclipse使用maven创建struct2项目及遇到的各种坑
    IIS7.5 提示未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序
    使用Canvas实现下雪功能
    基于脚本的动画的计时控制(“requestAnimationFrame”)(转)
    pointer-events属性
    chrome Provisional headers are shown错误提示
    Wcf资料收集
    Asp.Net WebApi 启用CORS跨域访问指定多个域名
    Cors 跨域Access-Control-Allow-Origin
  • 原文地址:https://www.cnblogs.com/billmiao/p/9872205.html
Copyright © 2020-2023  润新知