gpt4 book ai didi

java同步和共享表

转载 作者:行者123 更新时间:2023-12-01 11:58:50 25 4
gpt4 key购买 nike

我有一个带有表( HashMap )的单例对象(类)。所有其他对象(客户端)读取存储在表内的其他客户端的列表。所有使用该表的方法都被同步关键字包围。我调试了一种情况,该表对于不同的客户端具有不同的值。客户端可能会也可能不会在同一个线程上运行,这就是我添加同步关键字的原因。

这里是使用 hashmap 的方法:

public synchronized Client addToConnectedClients(long key, Client client)
{
return allConnectedClients.put(key, client);
}

public synchronized Client getFromConnectedClients(long key)
{
return allConnectedClients.get(key);
}

public synchronized Client removeFromConnectedClients(long key)
{
return allConnectedClients.remove(key);
}

这是我如何从客户端对象内部访问表:

Client temp=AppInterface.getInstance().getAppNetworkLogic().getFromConnectedClients(key);

AppNetowrkLogicAppInterface 单例中的一个对象,它是在创建 AppInterface 时创建的。

我不知道这是怎么发生的。

编辑:这是 getInstance 方法:

private static AppInterface instance=null;
public static AppInterface getInstance()
{
if(instance == null)
{
instance= new AppInterface();
}
return instance;
}

最佳答案

正如我所怀疑的,在多个客户端访问 getInstance 的竞争条件下,可能会发生竞争条件,并且可以创建多个 AppInterface

要么急切地创建AppInterface

private static AppInterface instance=new AppInterface();
public static AppInterface getInstance()
{
return instance;
}

或同步访问AppInterface

private static AppInterface instance=null;
public static AppInterface getInstance()
{
synchronized(AppInterface.class) {
if(instance == null)
{
instance= new AppInterface();
}
}
return instance;
}

关于java同步和共享表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28132653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com