我在写一个多人游戏,我需要一些解决方案来代表游戏场。我实现了演示Synchronized2DArray类,但我认为这不是最好的方法。同步块锁定整个数组,而我只需要锁定一个单元格。是否可以锁定一个单元格,或者可能有其他方法来提高性能?提高同步2D阵列的性能
class Synchronized2DArray {
private int[][] array;
public Synchronized2DArray(int size) {
array = new int[size][size];
}
public void setValue(int x, int y, int value) {
synchronized (array) {
array[x][y] = value;
}
}
public int getValue(int x, int y) {
synchronized (array) {
return array[x][y];
}
}
.................
}
“上面的代码使得一个线程设置一个值,而另一个线程正在读取该值时不可能。” 谢谢,我没有想过那 – Paul
是的。我只想确保你明白使用synchronized(array)不会奇迹般地阻止该数组上的更新。你不是在转动一些“魔法开关”来防止其他方法并行地更新数组对象! – GhostCat
阅读关于锁 - ReentrantReadWriteLock类解决我的问题。 关于面向对象的设计和抽象 - 我认为在我的情况下,没有必要为这个类创建抽象的父对象。只会有一个实现。这个同步数组是表示字段及其逻辑的类的内部类。 – Paul