在Java中同步使用for方法?

在Java中同步使用for方法?,java,Java,我需要了解java中Synchronized using for方法的用法。请查看下面的代码一次 代码: public void upDateAllUsersStatus(UserDetails userDetails) { for(Player p : userDetails.getPlayersList()) { if(p != null) { String userId = p.getUserId();

我需要了解java中Synchronized using for方法的用法。请查看下面的代码一次

代码:

public void upDateAllUsersStatus(UserDetails userDetails)
{


    for(Player p : userDetails.getPlayersList())
    {
        if(p != null)
        {
            String userId = p.getUserId();
            upDateUserStatus(userId );
        }
    }
}

public synchronized void upDateUserStatus(String name)
{           
    //here update status of user in db.
}
上述代码用于synchronizedfor方法。是否有可能使用synchronized upDateUserStatus获得java.util.ConcurrentModificationException

你能给我建议一下同步使用的方法有什么用吗

提前感谢。

如果upDateUserStatus修改了存储在其userDetails对象中的玩家列表,UpdateLuserStatus中循环的下一次迭代可能会抛出ConcurrentModificationException,因为玩家列表在UpdateLuserStatus迭代时被upDateUserStatus修改。synchronized关键字没有帮助:它可以防止在不同线程中并发执行,但不能防止单个线程在同一线程迭代列表时修改列表

但是,您的代码看起来很奇怪,我怀疑它还存在其他问题:您正在迭代存储在userDetails中的播放器列表,但实际上没有对单个播放器对象执行任何操作。您只需在同一个userDetails对象上多次调用upDateUserStatus。您是否打算让upDateUserStatus采用播放器参数而不是用户详细信息?如果是这样,那应该是安全的,因为一个玩家可能无法修改其他玩家的列表。

如果upDateUserStatus修改了存储在其userDetails对象中的玩家列表,upDateAllUsersStatus中循环的下一次迭代可能会抛出ConcurrentModificationException,因为播放器列表在upDateAllUsersStatus迭代时被upDateUserStatus修改。synchronized关键字没有帮助:它可以防止在不同线程中并发执行,但不能防止单个线程在同一线程迭代列表时修改列表


但是,您的代码看起来很奇怪,我怀疑它还存在其他问题:您正在迭代存储在userDetails中的播放器列表,但实际上没有对单个播放器对象执行任何操作。您只需在同一个userDetails对象上多次调用upDateUserStatus。您是否打算让upDateUserStatus采用播放器参数而不是用户详细信息?如果是这样,那应该是安全的,因为一个玩家可能无法修改其他玩家的列表。

是的,请检查一次我的代码,请再次建议我。@Wyzardies,检查一次我的代码,请再次建议我。@Wyzardifp!=null看起来像是不必要的迷信编码,应该删除。如果列表中有空值,请修复将空值放入列表的代码。ifp!=null看起来像是不必要的迷信编码,应该删除。如果列表中有空值,请修复将空值放入列表的代码。