zoukankan      html  css  js  c++  java
  • JDK源码分析

    ThreadLocal

    精华1

    每个线程对应一个 threadLocalMap (threadLocal的公共内部类)

    t.threadLocals = new ThreadLocalMap(this, firstValue);
    //this就是key  就是自己声明的threadlocal
    

    threadLocalMap的key是 自己声明的 threadlocal; 也就是说每个线程的threadLocalMap的key是一样的,但是threadLocalMap不一样;

    精华2

    threadLocalMap里面有entry[] ;能存放多个threadLocal; 也就是说一个线程上下文中可以声明多个threadLocal 初始大小16个

    int i = key.threadLocalHashCode & (len-1); // 定位当前threadLocal在entry[]的index;
    
    if (k == key) { //遍历entry[], 只要数组中的threadLocal和传过来的threadLocal相等就设置值
    e.value = value;
    return;
    }
    

    ArrayList

    public ArrayList() {
        // 直接将空数组赋给elementData
        this.elementData = {}
    }
    

    2 扩容

    int newCapacity = oldCapacity + (oldCapacity >> 1);
           if (newCapacity - minCapacity < 0)
               newCapacity = minCapacity;
           if (newCapacity - MAX_ARRAY_SIZE > 0)
               newCapacity = hugeCapacity(minCapacity);
    

    3 toArray

        public Object[] toArray() {
            return Arrays.copyOf(elementData, size);
        }
    实际是
    System.arraycopy(original, 0, copy, 0,
                             Math.min(original.length, newLength));
    
    

    4 modCount

    private class Itr implements Iterator<E> {
            int expectedModCount = modCount;//迭代过程不运行修改数组,否则就抛出异常
    
    }
    expectedModCount的初值为modCount
    
    hasNext的判断条件为cursor!=size,就是当前迭代的位置不是数组的最大容量值就返回true
    
    next和remove操作之前都会先调用checkForComodification来检查expectedModCount和modCount是否相等
    
    private class SubList extends AbstractList<E> implements RandomAccess {}
    

    HashMap

    线程池

  • 相关阅读:
    扩展欧几里得算法
    Warshall算法
    自己的博客
    使用forever运行web项目
    C#语言基础 Main 函数中的输出输入
    新手第一天学习 C#语言(进制互换)
    Django + Uwsgi + Nginx 实现生产环境部署1
    基于Flask的web微信
    python保存文件UnicodeEncodeError以及reload(sys)后print失效问题
    轮询/长轮询
  • 原文地址:https://www.cnblogs.com/albertXe/p/15155930.html
Copyright © 2011-2022 走看看