zoukankan      html  css  js  c++  java
  • JUC

    并发容器

    Queue实际上就是一个队列。

    队列是为了完成任务的装载的这种取和装这里面最重要的是叫做阻塞队列,它的实现初衷就是为了线程池、高并发做准备。

    Map

    Hashtable

    所有的方法默认都是加synchronized的,多数的时候我们的程序只有一个线程在工作,所以这种情况下完全没有必要加synchronized,因此最开始的时候设计的性能比较差。

    HashMap

    因为HashMap没有锁,线程不安全。虽然速度比较快,但是数据会出问题,还各种各样的报异常。主要是因为它内部会把这个变成TreeNode。HashMap这个东西,你往里面扔的时候,由于它内部没有锁,所以多线程访问的时候会出现问题。

    SynchronizedHashMap

    SynchronizedHashMap这个方法,给HashMap我们手动上锁。严格上讲,它和Hashtable效率上区别不大。

    ConcurrentHashMap

    ConcurrentHashMap是多线程里面真正用的。这个ConcurrentHashMap提高效率主要提高在读上面,由于它往里面插的时候内部又做了各种各样的判断。

    From Vect To Queue

    ArrayList

    没有加锁,线程不安全。

    Vector

    容器Vector,内部是自带锁的,你去读他的时候就会看到很多方法synchronized,所以用Vector的时候请放心它,线程一定是安全的。

    LinkedList

    由于你在调用这个并发容器的时候,你是调用了其中的两个原子方法,所以你在外层还得再加上一把锁synchronized(tickets)。

    Queue

    效率最高的就是Queue,这是最新的一个接口,它的主要目标就是为了高并发用的,就是为了多线程用的。所以,以后考虑多线程这种单个元素的时候多考虑Queue

    从Map的角度来讲最早是从Hashtable,先加锁到HashMap去掉锁,再到synchronizedHashMap加一个带锁的版本
    到ConcurrentHashMap多线程时候专用。注意,这不是替代关系。
    

    ConcurrentMap

    ConcurrentHashMap用hash表实现的这样一个高并发容器。

    ConcurrentHashMap里面用的是cas操作它用在tree的时候,用在这个节点上的时候实现起太复杂,所以就没有这个ConcurrentTreeMap,但是有时间也需要这样一个排好序的Map,那就有了ConcurrentSkipListMap跳表结构就出现了。

    ConcurrentSkipListMap通过跳表来实现高并发容器并且这个Map是有顺序的。

  • 相关阅读:
    web前端开发面试被虐篇(一)
    JSON字符串 拼接与解析
    IntelliJ IDEA 2017 Dubbo Elastic-job Redis Zookeeper RabbitMQ FastDFS MyCat 简介以及部分实现(三)
    IntelliJ IDEA 2017 MySQL5 绿色版 Spring 4 Mybatis 3 配置步骤详解(二)
    IntelliJ IDEA 2017 JDK Tomcat Maven 配置步骤详解(一)
    简单练习
    C#实现上传/下载Excel文档
    javascript练习题
    转 浏览器滚动条以及常用样式汇总
    深入基础(五)工具模块,常用模块(2)
  • 原文地址:https://www.cnblogs.com/striver20/p/13718888.html
Copyright © 2011-2022 走看看