我们不能使用线程安全的局部变量而不是 ThreadLocal。 以及使用 ThreadLocal 的位置。请引用一些真实的应用例子。
最佳答案
一个典型的例子是SimpleDateFormat
,它不是线程安全的。在多线程上下文中,有两个线程安全选项,其中包括:
private static ThreadLocal<SimpleDateFormat> fmtHolder = new ThreadLocal<SimpleDateFormat>() {
@Override protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("dd/MM/yyyy");
}
};
private void method() {
SimpleDateFormat fmt = fmtHolder.get();
}
或使用本地实例:
private void method() {
SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
}
前者效率更高,后者更易于阅读和推理。
关于java - Java 中的线程局部变量与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797462/