《Java核心技术I》线程局部变量
线程局部变量
ThreadLocal辅助类为各个线程提供各自的实例。
public static final THreadLocal dateFormat
= ThreadLocal.withInitial(()->new SimpleDateFormat("yyyy-MM-dd"));
要访问具体的格式化方法,可以调用:
String dateStamp = dateFormat.get().format(new Date());
多线程中生成随机数也存在类似问题,java.util.Random是线程安全的,但如果多线程需要等待一个共享的随机数生成器,很低效。
可以用线程变量,Java7提供了一个便利类:
int random = ThreadLocalRandom.current().nextInt(upperBound);
java.lang.ThreadLocal 1.2
- T get(),得到这个线程的当前值,如果是首次调用get,会调用initialize来得到这个值。
- void set(T t),为这个线程设置新值。
- void remove(),删除对应这个线程的值。
- static
ThreadLocalwithInitial(Supplier supplier) 8,创建一个线程局部变量,其初始值通过调用给定的提供者生成。
java.util.concurrent.ThreadLocalRandom 7
static ThreadLocalRandom current(),返回特定于当前线程的Random类的实例。