gpt4 book ai didi

java - 类中的线程安全

转载 作者:行者123 更新时间:2023-11-29 06:11:41 25 4
gpt4 key购买 nike

请您看一下下面的代码并告知 ClassA 是否是线程安全的?如果它不是线程安全的,您能否告知它在哪里中断?

public class ClassA {

private List<Player> players;

public ClassA() {
this.players = Collections.synchronizedList(new ArrayList<Player>());
}

public Player play(Player player){
int score = 0;
.
.
.

if (players.contains(player)) {
player = players.get(players.indexOf(player));
player.addScore(score);
} else {
player.addScore(score);
players.add(player);
}
return player;

}

}

最佳答案

不,不是。

例如,两个线程可能无法通过 players.contains 测试,并且都添加了他们的播放器版本(更好的方法是每次都将播放器添加到一个集合中)。此外,除非 Player.addScore 是线程安全的,否则添加分数可能会出现微妙的错误。

同步整个 play 方法(并将 players 恢复为正常列表)将解决这些问题。

关于java - 类中的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6564679/

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