多线程与高并发(六)--容器

概述

 

 

Vector

  • Vector存放单个元素,所有方法都是synchronized方法。
  • 基本不用。

Hashtable

  • Hashtable使用哈希表来存储键值对(不支持null键和null值)。
  • 所有方法都是synchronized方法。
  • 基本不用。

HashMap

  • HashMap使用哈希表来存储键值对(支持null键和null值)。
  • 线程不安全。

Collections.synchronizedMap

  • 可以把HashMap变为加锁版本。
  • 锁没有直接加在方法上,加在了方法里。
    public int size() {
        synchronized (mutex) {return m.size();}
    }
    public boolean isEmpty() {
        synchronized (mutex) {return m.isEmpty();}
    }
    public boolean containsKey(Object key) {
        synchronized (mutex) {return m.containsKey(key);}
    }
    public boolean containsValue(Object value) {
        synchronized (mutex) {return m.containsValue(value);}
    }
    public V get(Object key) {
        synchronized (mutex) {return m.get(key);}
    }
    
    public V put(K key, V value) {
        synchronized (mutex) {return m.put(key, value);}
    }
    public V remove(Object key) {
        synchronized (mutex) {return m.remove(key);}
    }
    public void putAll(Map<? extends K, ? extends V> map) {
        synchronized (mutex) {m.putAll(map);}
    }
    public void clear() {
        synchronized (mutex) {m.clear();}
    }

ConcurrentHashMap

ConcurrentSkipListMap

  • 遍历效率更高
  • 线程安全的有序的哈希表,适用于高并发的场景。基于跳表实现,跳表(Skip List)是平衡树的一种替代的数据结构,和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的。(参考https://blog.coderap.com/article/241

CopyOnWriteList

  • 写时复制
    • 写时加锁,读不加锁。
    • 添加元素时,复制原来的List,扩展出一个位置,将元素放到扩展出来的位置,然后将原引用指向新List。

BlockingQueue:阻塞队列

  多线程友好的API

    • offer
      • 添加一个值,是否加入进去会给一个返回值
    • poll
      • 读值(不remove)
    • peek
      • 取值(remove)
  • LinkedBlockingQueue(无界队列)
    • put(阻塞方法)
      • 如果满了,阻塞。
    • take(阻塞方法)
      • 如果没有值,阻塞。
  • ArrayBlockingQueue(有界队列)
    • 同上
  • DelayQueue
    • 按照在队列中的等待时间排序。
    • 按时间进行任务调度。
  • PriorityQueue
    • 内部有排序。
  • SynchronusQueue
    • 容量为0.
    • 不是用来存储数据的,是用来给其他线程传递数据的。
    • 如果没有线程取数据,会一直阻塞。
  • TransferQueue
    • 可以用来装数据
    • 提供了transfer API:使用transfer会阻塞,等待别的线程取走。
posted @ 2021-02-17 11:09  January01  阅读(14)  评论(0)    收藏  举报