Skip to the content.

首页

version: jdk17


public class Thread implements Runnable

线程状态

Java线程模型是基于操作系统原生线程模型来实现。

属性

静态方法

实例方法


ThreadLocal

线程局部变量,并不实际存储值,而是使用ThreadLocalMap,建议使用static修饰

哈希值

private final int threadLocalHashCode = nextHashCode();
private static AtomicInteger nextHashCode = new AtomicInteger();
private static final int HASH_INCREMENT = 0x61c88647;
private static int nextHashCode() {
    return nextHashCode.getAndAdd(HASH_INCREMENT);
}

不使用Object默认哈希值,而是使用魔数0x61c88647作为增长步幅生成固定的哈希值,能均匀的分布在2的N次方的数组里,原理是斐波那契散列法。

方法


ThreadLocalMap

结构

static class Entry extends WeakReference<ThreadLocal<?>> {

    Object value; // ThreadLocal关联的值

    Entry(ThreadLocal<?> k, Object v) {
        super(k);
        value = v;
    }
}

private Entry[] table; // Entry数组,初始容量16,且要求为2的次方。

private int size = 0; // Entry数量

private int threshold; // rehash阈值,为2/3容量,而resize阈值为1/2容量。

ThreadLocal真正的核心,为线性探测法实现的Map,Entry弱引用了ThreadLocal,但value为强引用,当ThreadLocal对象被回收后,视为Entry过期,需要对Entry进行清理。

方法


class InheritableThreadLocal<T> extends ThreadLocal<T>

可继承的ThreadLocal,基于ThreadLocal,解决父子线程之间上下文传递的问题。