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

    线程池

  • 相关阅读:
    [VC++]轻松搞VC之定时器(Timer)
    [VC++]VC中如何获得当前系统时间
    [VC++]如何利用this获得窗口句柄
    SMART原则
    SQL配置
    术语百科
    关于SQL锁问题
    第六代OA办公理念(摘录)
    心动机型
    SQL2008R2的索引重建
  • 原文地址:https://www.cnblogs.com/albertXe/p/15155930.html
Copyright © 2011-2022 走看看