【发布时间】:2019-01-03 10:20:19
【问题描述】:
我正在尝试将应用程序移植到 Java 线程安全,因此希望尽量减少所需的静态变量数量。
我将展示一个我想要澄清的问题的示例。我有一个类Eparams如下:
public class Eparams {
private double a;
public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
}
我在另一个类中设置了值,Epi。
public class Epi {
static Eparams eparams = new Eparams();
public void epi() {
eparams.setA(3.44);
}
public Eparams getEparams() {
return eparams;
}
}
我想在另一个类EpiParts 中访问a 类型的a 的值:
public class EpiParts {
public void test() {
Epi epi = new Epi();
Eparams eparams = epi.getEparams();
double val= eparams.getA();
System.out.print(val);
}
}
我需要Eparams 值是非静态的,并且有多个线程访问这个类。我所做的方式是实现这一目标的最佳方式吗?
如果我在Epi 中声明Eparams 的一个新实例是静态的,那么访问这个实例的线程有什么含义?使这个实例静态是我让它工作的唯一方法。
这是错误的处理方式吗?有没有更简单的方法以线程安全的方式跨不同类检索值(除了函数参数和返回值)?
【问题讨论】:
-
你可能想同步访问
a -
您可能想看看synchronization。您可以提供同步方法来访问(getter)或更改(setter)实例变量
标签: java multithreading thread-safety