ThreadLocal用来提供局部变量,可以保证线程安全,用来存储数据,提供了set和get方法。
举例:多个线程使用 ThreadLocal 存储用户名
中间是一个ThreadLocal对象tl,两边是两个线程。
蓝色线程存储用户名,绿色线程存储用户名。两边读取的时候,都只能读取到自己边set的用户名。
测试代码
import org.junit.jupiter.api.Test; public class ThreadLocalTest{ @Test public void testThreadLocalAndGet() { //提供一个ThreadLocal对象 ThreadLocal tl = new ThreadLocal(); //开启两个线程 new Thread(() -> { tl.set("萧盐"); System.out.println(Thread.currentThread().getName() + "++" + tl.get()); System.out.println(Thread.currentThread().getName() + "++" + tl.get()); System.out.println(Thread.currentThread().getName() + "++" + tl.get()); }, "蓝色").start(); new Thread(() -> { tl.set("你好"); System.out.println(Thread.currentThread().getName() + "++" + tl.get()); System.out.println(Thread.currentThread().getName() + "++" + tl.get()); System.out.println(Thread.currentThread().getName() + "++" + tl.get()); }, "绿色").start(); } }
测试结果
各自线程线程只会获取到各自线程创建的数据。