将许多向量同步在一起

时间:2014-08-28 17:35:00

标签: java vector synchronized

我有一个静态Vector用户,每个用户都有一个或多个帐户,因此每个用户都有一个Vector帐户。用户和帐户具有唯一ID。 添加一个新用户很简单:我有一个静态Vector,我可以很容易地检查最后一个用户的ID,我可以获得新用户做id.getId()+ 1的新ID。

添加新用户后,添加新帐户会出现问题。帐户ID必须是唯一的,因此我必须检查每个用户的帐户向量中包含的最大ID。如果许多流程可以添加/删除用户和帐户,那么同步所有帐户向量并安全地添加/删除帐户的最佳方法是什么?

实际上,用户添加如下

public boolean addNewUser(User user)
{
    if(user!=null)
    {
        int id=getNewUserId();
        if(id!=-1)
        {
            user.setId(id);
            utenti.add(user);
            return false;
        }
        else
            return false;
    }
    else
        return false;
}

private int getNewUserId()
{
    User user=utenti.lastElement();
    if(user!=null)
        return user.getId()+1;
    else
        return -1;
}

2 个答案:

答案 0 :(得分:1)

关于id,我建议使用你一直增加的长值(无论帐号被删除)。

同步会更难,取决于你想做什么。 一个简单的规则是,如果你有一个列表对象,每当你访问它时(读或写)都使用一个synchronized块:

synchronized(myList) {
    //update the list, do whatever you like, there is no concurrent modification
}

根据您的确切用法,可能有更好的方法,但这应该有效。

答案 1 :(得分:1)

可能不是最有效的方式,但您可以创建一个int,然后查看每个用户的每个帐户列表的大小。

int id = 0;
for (User user : AllUsers) {
    id += user.listOfAccounts.size();
}

现在你的id将是最后一个id。只需在创建新帐户时添加1即可。

请注意,如果可以删除帐户,则会出现问题。