java - 是否可以同步数据成员而不是方法?

标签 java

在阅读了此处有关 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/

相关文章:

java - 为什么for循环比while循环快

java - 如何限制一个java程序只执行N次

java - 使用 java 和 iText 签署 PDF 哈希值

java - 如何让struts2只在POST上验证

java - 将实体持久化到数据库和搜索引擎

java - 当 XML 中有多个命名空间时,如何 getChildText() 具有命名空间的节点?

Java流API : How to use method reference?

java - 无法弄清楚 URIException

java - 单次 war 部署的多上下文根 jboss-EAP-6.1

java - 从字符串数组中提取标记位置 - Java