我在寫一個多人遊戲,我需要一些解決方案來代表遊戲場。我實現了演示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