在阅读了此处有关 Java 同步方法的主题后,我尝试在我的多人游戏中实现它,因为打开了许多线程并试图访问相同的资源。 我已经使方法同步,但这对我没有帮助,因为如果我有一个名为 ArrayList clientConnection 的数据成员;可用的方法有:
int getArrayListSize() {
clientConnection.size();
}
void addConnection(ServerConnection i_connection) {
clientConnection.add(i_connection);
}
void removeConnection(ServerConnection i_connection) {
int index = clientConnections.indexOf(i_Connection);
clientConnections.remove(index);
}
ServerConnection getClientFromArrayListByIndex(int i_Index) {
ServerConnection client = this.clientConnections.get(i_Index);
}
我已经尝试制作一个全局同步方法,每当有人想要使用他需要传递操作类型和其他数据的方法之一时,他就会锁定该函数。 问题是有 2 个函数返回 void,1 个返回 int,1 个返回 ServerConnection,所以我无法创建该全局方法。 我的问题是在 Java 中是否可以锁定数据成员而不是方法,这样我就可以锁定 clientConnection 数据成员? 谢谢。
最佳答案
如果你让所有这些方法同步,那么一次只有一个线程能够调用任何方法,因此列表将以线程安全的方式被访问,前提是只有这些方法能够访问列表(即列表是私有(private)的,没有其他方法使用该列表)。
synchronized int getArrayListSize() { ... }
synchronized void addConnection(ServerConnection i_connection) { ... }
etc.
关于java - 是否可以同步数据成员而不是方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7640735/