Java 8 Java:ThreadLocal get()方法替代方案

Java 8 Java:ThreadLocal get()方法替代方案,java-8,thread-local,Java 8,Thread Local,我想知道,有没有一种优雅的方法来获取Threadlocal初始值? 我问这个问题的原因是因为我正在将一个非线程安全的项目转换成一个线程安全的项目,问题是,有将近一千个不同的类字段不能在所有线程之间共享,并且必须对每个线程都是独占的,因此使用ThreadLocal解决了这个问题 问题是,一旦字段转换为ThreadLocal,在代码中的每个字段使用上,我都必须添加一个.get(),这可能需要几光年才能完成 例如: 声明字段: private ThreadLocal<String> fie

我想知道,有没有一种优雅的方法来获取Threadlocal初始值? 我问这个问题的原因是因为我正在将一个非线程安全的项目转换成一个线程安全的项目,问题是,有将近一千个不同的类字段不能在所有线程之间共享,并且必须对每个线程都是独占的,因此使用ThreadLocal解决了这个问题

问题是,一旦字段转换为ThreadLocal,在代码中的每个字段使用上,我都必须添加一个.get(),这可能需要几光年才能完成

例如:

声明字段:

private ThreadLocal<String> field1 = new ThreadLocal<>();
System.out.println("field1 = "+field1.get());
private ThreadLocal<String> field1 = new ThreadLocal<>();
System.out.println("field1 = "+field1);
打印字段:

private ThreadLocal<String> field1 = new ThreadLocal<>();
System.out.println("field1 = "+field1.get());
private ThreadLocal<String> field1 = new ThreadLocal<>();
System.out.println("field1 = "+field1);
一定有一个IDE快捷方式可以解决这个问题

但是考虑到代码外观、代码含义、优雅性和未来的发展,我在这篇文章中的目标是了解是否有一种优雅的方式可以实现ThreadLocal的字段值,就像在C#中一样,在C#中,您有一个字段属性,可以按照您希望的方式包装它,只需输入字段的名称,就可以得到它的值

我希望实现的目标:

声明字段:

private ThreadLocal<String> field1 = new ThreadLocal<>();
System.out.println("field1 = "+field1.get());
private ThreadLocal<String> field1 = new ThreadLocal<>();
System.out.println("field1 = "+field1);
优雅的包装:

{some ThreadLocal.get() property wrapper}
打印字段:

private ThreadLocal<String> field1 = new ThreadLocal<>();
System.out.println("field1 = "+field1.get());
private ThreadLocal<String> field1 = new ThreadLocal<>();
System.out.println("field1 = "+field1);
总的来说,出于某种原因,我对.get()解决方案一点也不满意


有什么建议吗?

如果在编写
ThreadLocal
T
时,即使按
Shift
键,恐怕对您来说工作量太大,也没有帮助。我首先想,你说的是初始值,有一个替代方案,但是,你只是说你不喜欢在你想要得到值的时候说
get
,说真的?关于大写字母T,我的shift键不是百分之百,尽管如此,我还是对懒惰的打字机过敏。关于这个线程背后的主要思想,@Holger,我们都有不同的看法,我经历了很多场景,其中.get()在另一个.get()方法之后出现,这有点多余,我的问题仍然存在,有没有一种方法可以通过只指定threadlocal的字段名来获取值?我知道有些人喜欢用
foo.bar.baz
替换,例如
getFoo().getBar().getBaz()
,但我不知道如何替换
.get().get().get()
。唯一的
get()
可以省略,而不会丢失信息,但是当“.get()位于另一个.get()方法之后时,语法和行为应该是什么呢”?如果所有这些
get()
调用都来自线程局部变量,那么您可能过度使用了它们。如果使用不相关的get方法引用不同的对象,我的问题仍然存在