ThreadLocal 用于在多线程环境中安全的保存线程本地变量,同一线程在某个地方保存数据,在随后的任意地方都可以获取到。线程之间 ThreadLocal 中的数据是互相隔离的,所以 ThreadLocal 变量是线程安全的,这可以避免某些情况下为了保证线程安全而采取同步操作带来的性能损失。

在并发编程中,需要处理两个关键问题:线程之间如何通信、线程之间如何同步。

通信是指线程之间消息的交换,在命令式编程中线程之间的通信机制主要有两种:

  • 共享内存: 线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。
  • 消息传递: 通过发送消息来进行显式通信。

同步是指程序中用于控制不同线程间操作发生的相对顺序的机制:

  • 在共享内存的并发模型里,同步是显式进行的,程序员必须显式的指定某个方法或某段代码需要在线程之间互斥执行。
  • 在消息传递的并发模型里,由于消息的发送必须在消息的接收之前,因此同步是隐式进行的。

在 Java 中,并发编程采用的是共享内存模型,线程之间的通信总是隐式进行的,整个通信过程对程序员完全透明。