我是Java的新手,我正在构建一个springboot应用程序,其中不同的类需要来自同一源的数据。源是几个文件,但重要的是要花费大量时间才能取出数据。取出所有数据的速度与取出不同类需要的每个数据一样快,因此对函数进行分区无济于事。
因此,我想拥有一个初始化一次的类,获取所有数据,然后提供需要数据的类。理想情况下,仅在请求时将其初始化,然后将数据保存在实例中。
假设我有课:
package myapp;
import java.util.concurrent.TimeUnit;
import java.lang.InterruptedException;
public class ExampleClass {
private int usefulValue;
public ExampleClass(){
this.usefulValue = slowMethod();
}
private int slowMethod(){ //just an example of something that takes time
int usefulValue;
try {
TimeUnit.SECONDS.sleep(500);
} catch (InterruptedException e){
;
}
usefulValue = 15;
return usefulValue;
}
public int getUsefulValue(){
return this.usefulValue;
}
}
我如何才能运行该程序,并使usefulValue
可以用于程序包中的其他类,而无需在每个单独的类中重新加载它?
这些值在内存方面非常易于管理,我正在寻找内存中的解决方案。我可以将其写到文件/数据库中,或者运行为应用程序提供服务的套接字服务器,但问题与Java可以做什么有关。
Ps。 usefulValue
每天大约更改一次
答案 0 :(得分:1)
package myapp;
import java.util.concurrent.TimeUnit;
import java.lang.InterruptedException;
public class ExampleClass {
public static int usefulValue;
public ExampleClass(){
ExampleClass.usefulValue = slowMethod();
}
private int slowMethod(){ //just an example of something that takes time
int usefulValue;
try {
TimeUnit.SECONDS.sleep(500);
} catch (InterruptedException e){
;
}
usefulValue = 15;
return usefulValue;
}
public int getUsefulValue(){
return ExampleClass.usefulValue;
}
}
还可以在其他任何类中使用其值,例如ExampleClass.usefulValue
,以便在整个应用程序或此线程中其值保持不变。
答案 1 :(得分:1)
您可以使用延迟初始化。
private Integer usefulValue;
public ExampleClass(){
// this.usefulValue = slowMethod();
}
public int getUsefulValue(){
if (this.usefulValue == null) {
this.usefulValue = slowMethod();
}
return this.usefulValue;
}
或为此使用:lombok