[英]Synchronized using for Methods in Java?
I need to know about the usage of Synchronized using for methods in java .Please see the below code once. 我需要了解Java中for方法的Synchronized using的用法。请一次查看以下代码。
Code : 代码:
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.
}
The above code used synchronized
for method.is there any possibility of getting java.util.ConcurrentModificationException using synchronized above upDateUserStatus()? 上面的代码中使用
synchronized
对method.is那里得到java.util.ConcurrentModificationException的任何可能性利用上述upDateUserStatus同步()?
Can you please suggest me what is the use of synchronized using for above method?. 您能否建议我上述方法的“同步使用”有什么用?
Thanks in Advance. 提前致谢。
If upDateUserStatus
modifies the list of players stored in its userDetails
object, the next iteration of the loop in upDateAllUsersStatus
may throw a ConcurrentModificationException
because the player list was modified (by upDateUserStatus
) while it's being iterated (by upDateAllUsersStatus
). 如果
upDateUserStatus
修改了存储在其userDetails
对象中的播放器列表,则upDateAllUsersStatus
循环的下一次迭代可能会引发ConcurrentModificationException
因为播放器列表是在被迭代( upDateUserStatus
)时被修改的(通过upDateAllUsersStatus
)。 The synchronized
keyword doesn't help: that protects against concurrent execution in different threads, but it doesn't prevent an individual thread from modifying a list while that same thread is iterating it. synchronized
关键字无济于事:它可以防止在不同线程中并发执行,但是它不能防止单个线程在同一线程对其进行迭代时修改列表。
Your code looks strange, though, and I suspect it has other problems: you're iterating the list of players stored in userDetails
, but you don't actually do anything with the individual Player
objects. 但是,您的代码看起来很奇怪,我怀疑它还有其他问题:您正在迭代存储在
userDetails
中的播放器列表,但实际上对单个Player
对象没有任何作用。 You just call upDateUserStatus
multiple times on the same userDetails
object. 您只需在同一
userDetails
对象上多次调用upDateUserStatus
。 Did you intend for upDateUserStatus
to take a Player
argument instead of a UserDetails
? 您是否打算让
upDateUserStatus
接受Player
参数而不是UserDetails
? If so, that should be safe, since an individual Player
(presumably) can't modify the list of other players. 如果是这样,那应该是安全的,因为单个
Player
(大概)无法修改其他玩家的列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.