每日一篇-7.27-ThreadLocal

首先要知道什么是ThreadLocal.
在多线程的环境中,每次进行线程切换都需要进行上下文切换,需要横跨若干方法调用非常的麻烦。
Java标准库提供了一个特殊的ThreadLocal,它可以在一个线程中传递同一个对象。以把ThreadLocal看成一个全局Map:每个线程获取ThreadLocal变量时,总是使用Thread自身作为key:

Object threadLocalValue = threadLocalMap.get(Thread.currentThread());

因此,ThreadLocal相当于给每个线程都开辟了一个独立的存储空间,各个线程的ThreadLocal关联的实例互不干扰。

通过HashCode标识每个线程。可以消除在相同线程使用连续构造的 ThreadLocals 的常见情况下的冲突。

private final int threadLocalHashCode = nextHashCode();

以下是ThreadLocal的API:
每日一篇-7.27-ThreadLocal_第1张图片

  • set()方法,设置当前线程中变量的副本。
  • get()方法,获取 ThreadLocal在当前线程中保存的变量副本。
  • remove()方法,清空当前线程中变量的副本。
  • initialValue()是一个 protected方法,一般是用来重写的,如果在没有set的时候就调用 get,会调用 initialValue方法初始化内容。

你可能感兴趣的:(java-web)