Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在静态final字段中保存线程本地值是一种不好的做法吗?_Java_Multithreading_Thread Local - Fatal编程技术网

Java 在静态final字段中保存线程本地值是一种不好的做法吗?

Java 在静态final字段中保存线程本地值是一种不好的做法吗?,java,multithreading,thread-local,Java,Multithreading,Thread Local,我在遗留系统中遇到以下代码 private static final ThreadLocal<DateFormat> dateFormatThreadLocal = new ThreadLocal(){ @Override protected Object initialValue() { //Set initial value return new SimpleDateFormat(""); } }; private s

我在遗留系统中遇到以下代码

private static final ThreadLocal<DateFormat> dateFormatThreadLocal = new ThreadLocal(){

    @Override
    protected Object initialValue() {
        //Set initial value
        return new SimpleDateFormat("");
    }
};


private static final DateFormat someValue = dateFormatThreadLocal.get();
private static final ThreadLocal dateFormatThreadLocal=new ThreadLocal(){
@凌驾
受保护对象初始值(){
//设定初始值
返回新的SimpleDataFormat(“”);
}
};
私有静态最终DateFormat someValue=dateFormatThreadLocal.get();
不过,我有以下问题

1.)将线程局部变量定义为final是一个好主意。(我知道静电很好)

2.)在静态(或静态和最终)实例变量中保留thread local.get()调用是一个好主意吗?(如果我们这样做的话,它是否妨碍了将线程放在本地的整个目的)

1.)将线程局部变量定义为final是一个好主意。(我知道静电很好)

如果您没有分配给
dateFormatThreadLocal
,则
final
没有区别。但是,这通常是一个好主意,因为它可以防止您意外地指定给它

2.)在静态(或静态和最终)实例变量中保留thread local.get()调用是一个好主意吗?(如果我们这样做的话,它是否妨碍了将线程放在本地的整个目的)

不,不是。实际上,如果您这样做,那么首先就无法实现线程本地化的全部目的

无论哪个线程首先加载该类,都将检索其SimpleDataFormat,并将对该对象的引用存储在
someValue
中。然后,无论何时使用
someValue
,当前线程都将使用该线程的SimpleDataFormat(它以前使用过),而不是调用
dateFormatThreadLocal.get()
,并获取自己的SimpleDataFormat


如果您使用的是ThreadLocal,那么您可能不希望每个线程都使用同一个对象,否则为什么还要麻烦使用它呢?

FYI如果您有java 8,您可以使用线程安全的
DateTimeFormatter