如何确保具有公共实例访问权限的程序线程-在以下内容中定义 坐标类,无法读取状态不一致的坐标,即 setXY方法的两个命令?如果您可以修改类的解决方案- 坐标,即使你不能。
public class Coordinates {
int x, y;
public int[] getXY() {return new int[]{x, y};}
public void setXY(int x, int y) {
this.x = x;
this.y = y;
}
}
答案 0 :(得分:0)
public class Coordinates {
private int x;
private int y;
public synchronized int[] getXY() {return new int[]{x, y};}
public synchronized void setXY(int x, int y) {
this.x = x;
this.y = y;
}
}
您可以如上所述修改代码。
该字段是私有的,这意味着其他类无法访问或修改此属性。调用该方法时,将获得对象实例的锁。方法调用完成后,该锁将自动释放。这样可以确保当前只有一个线程在访问该方法。
但是,以上代码仅适用于小规模并发-存在很大的性能问题。所有的getter和setter都只有单线程访问。在高并发情况下,也许有一种方法可以解决您的问题,但是您需要使问题更清楚。