面试题:

  1. ConcurrentHashMap有哪些构造函数?
  2. ConcurrentHashMap使用什么技术来保证线程安全?
  3. ConcurrentHashMap的get方法是否要加锁,为什么?
  4. ConcurrentHashMap迭代器是强一致性还是弱一致性?HashMap呢?
  5. ConcurrentHashMap1.7和1.8的区别;

1、ConcurrentHashMap有哪些构造函数?

一共有五个,作用及代码如下:

    //无参构造函数
    public ConcurrentHashMap() {
    }
    //可传初始容器大小的构造函数
    public ConcurrentHashMap(int initialCapacity) {
        if (initialCapacity < 0)
            throw new IllegalArgumentException();
        int cap = ((initialCapacity >= (MAXIMUM_CAPACITY >>> 1)) ?
                   MAXIMUM_CAPACITY :
                   tableSizeFor(initialCapacity + (initialCapacity >>> 1) + 1));
        this.sizeCtl = cap;
    }
    //可传入map的构造函数
    public ConcurrentHashMap(Map<? extends K, ? extends V> m) {
        this.sizeCtl = DEFAULT_CAPACITY;
        putAll(m);
    }
    //可设置阈值和初始容量
    public ConcurrentHashMap(int initialCapacity, float loadFactor) {
        this(initialCapacity, loadFactor, 1);
    }

    //可设置初始容量和阈值和并发级别
    public ConcurrentHashMap(int initialCapacity,
                             float loadFactor, int concurrencyLevel) {
        if (!(loadFactor > 0.0f) || initialCapacity < 0 || concurrencyLevel <= 0)
            throw new IllegalArgumentException();
        if (initialCapacity < concurrencyLevel)   // Use at least as many bins
            initialCapacity = concurrencyLevel;   // as estimated threads
        long size = (long)(1.0 + (long)initialCapacity / loadFactor);
        int cap = (size >= (long)MAXIMUM_CAPACITY) ?
            MAXIMUM_CAPACITY : tableSizeFor((int)size);
        this.sizeCtl = cap;
    }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-06
  • 2019-02-11
  • 2021-07-26
  • 2021-11-04
  • 2022-01-24
  • 2021-09-24
猜你喜欢
  • 2022-03-07
  • 2021-04-18
  • 2022-12-23
  • 2021-06-20
  • 2022-12-23
  • 2022-12-23
  • 2021-08-28
相关资源
相似解决方案