SuppliedThreadLocal 和ThreadLocal
时间: 2023-08-17 08:15:34 浏览: 236
SuppliedThreadLocal和ThreadLocal都是Java中用于创建线程本地变量的类。它们的作用是为每个线程提供一个独立的变量副本,使得每个线程都可以独立地访问和修改该变量,而不会相互干扰。
SuppliedThreadLocal是Java 8中引入的一个类,它是ThreadLocal的一个子类。与ThreadLocal不同的是,SuppliedThreadLocal在创建时需要传入一个Supplier函数接口,用于提供初始值。这样,在每个线程第一次访问该变量时,会调用Supplier函数接口来获取初始值。例如,可以使用以下方式创建一个SuppliedThreadLocal对象并设置初始值:
SuppliedThreadLocal<Integer> suppliedThreadLocal = new SuppliedThreadLocal<>(() -> 1);
System.out.println(suppliedThreadLocal.get());
这段代码中,通过传入一个Lambda表达式,将初始值设置为1,并通过get方法获取该值。[2]
而ThreadLocal是Java中的一个类,用于创建线程本地变量。它的使用方式与SuppliedThreadLocal类似,可以通过withInitial方法设置初始值。例如,可以使用以下方式创建一个ThreadLocal对象并设置初始值:
ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> 1);
System.out.println(threadLocal.get());
这段代码中,通过withInitial方法将初始值设置为1,并通过get方法获取该值。[2]
需要注意的是,如果使用ThreadLocal创建线程变量,读写的是Thread对象的threadLocals;如果使用InheritableThreadLocal创建线程变量,读写的是Thread对象的inheritableThreadLocals。[3]
阅读全文