java - 将许多 vector 同步在一起

标签 java vector synchronized

我有一个静态Vector用户,每个用户都有一个或多个帐户,因此对于每个用户都有一个Vector帐户。用户和帐户有一个唯一的 ID。 添加新用户很简单:我有一个静态 vector ,我可以轻松检查最后一个用户的 id,并且可以通过执行 user.getId()+1 获取新用户的新 id。

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

实际上添加一个User如下

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;
}

最佳答案

关于 id,我建议使用一个一直递增的长值(无论帐户是否被删除)。

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

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

根据您的具体使用情况,可能有更好的方法,但这应该可行。

关于java - 将许多 vector 同步在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25554774/

相关文章:

java - 当前堆在 java 中更新

java - 玩!框架使用 <lot> 的静态变量

java - weblogic 12 中的 EJB 初始化错误,但 10 中没有

python - numpy 中检查向量是否对齐或方向相反的最快方法(截断的 SVD 后处理)

c++ - 忽略 vector C++ 中的空格

java - java中无法同步方法

java - 同步与 ReadWriteLock 性能

java - JDK升级后Tomcat需要重启吗?

c++ - 正确同步的 C++ 代码

java - 找到用于旋转给定实体的增量角度,其位置、初始旋转和目标点为 'face toward'