Java 中的惰性编程
Lazy-programming in Java
我的问题很简单。我不明白以下并发编程练习。所以问题基本上是我必须在这里做什么:
public class Point {
private final double x, y;
private double distance; // Hinweis: sqrt (x*x+y*y);
public Point(final double x, final double y) {
this.x = x;
this.y = y;
this.distance = -1; // Lazy: Könnte u.U. nie benötigt werden
}
public double getX() { return x; }
public double getY() { return y; }
public double getDistance() {
...???
}
}
文本说:Lazy Evaluation - getDistance()
应该给出点到原点的距离。距离不应通过初始化设置,也不会在每次调用时反复计算(因为 x 和 y 距离是常数)。
他们是要我在这里使用 Futures 吗?
此致。
下面的代码只会计算一次距离。
您确定问题是关于并发的吗?如果2个线程同时调用getDistance()
,可能会计算两次,但这并不是真正的开销。但是,如果无论如何都必须只计算一次距离,那么您需要使用 public synchronized double
代替,更多信息 here.
private Double distance; // changed from double to Double so it's nullable
public double getDistance() {
if (distance == null) {
distance = <calculate distance here>
}
return distance;
}
我的问题很简单。我不明白以下并发编程练习。所以问题基本上是我必须在这里做什么:
public class Point {
private final double x, y;
private double distance; // Hinweis: sqrt (x*x+y*y);
public Point(final double x, final double y) {
this.x = x;
this.y = y;
this.distance = -1; // Lazy: Könnte u.U. nie benötigt werden
}
public double getX() { return x; }
public double getY() { return y; }
public double getDistance() {
...???
}
}
文本说:Lazy Evaluation - getDistance()
应该给出点到原点的距离。距离不应通过初始化设置,也不会在每次调用时反复计算(因为 x 和 y 距离是常数)。
他们是要我在这里使用 Futures 吗?
此致。
下面的代码只会计算一次距离。
您确定问题是关于并发的吗?如果2个线程同时调用getDistance()
,可能会计算两次,但这并不是真正的开销。但是,如果无论如何都必须只计算一次距离,那么您需要使用 public synchronized double
代替,更多信息 here.
private Double distance; // changed from double to Double so it's nullable
public double getDistance() {
if (distance == null) {
distance = <calculate distance here>
}
return distance;
}