gpt4 book ai didi

java - 流过滤器线程安全

转载 作者:行者123 更新时间:2023-12-02 01:59:40 26 4
gpt4 key购买 nike

我想知道这段代码是否会遇到竞争条件或并发问题:

public User getByName(String name) {
characters.values().stream().filter(chr -> chr.getName().equalsIgnoreCase(name)).findAny().orElse(null));
}

其中`字符是:

private final Map<Integer, Player> characters = new HashMap<>();

这里有必要使用ReentrantReadWriteLock吗?基本上,这是我的游戏的一种角色存储类型,我在其中添加和删除角色对象。 (通过放置/删除)。

最佳答案

Streams 不保证任何线程安全。如果您使用类成员(如您的情况),则必须确保在您的末端管理线程。但是,如果您在 lambda 表达式中使用局部变量,则这些变量对其他线程不可见。另请注意,将 characters 设置为 Final 只能保证变量无法重新分配。仍然可以对 map 本身进行更改。有关更多详细信息,您甚至可以查看this answer .

编辑:根据documentation :

Side-effects in behavioral parameters to stream operations are, in general, discouraged, as they can often lead to unwitting violations of the statelessness requirement, as well as other thread-safety hazards.

关键点是使用术语行为参数,它意味着类的状态保持(成员变量)。

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

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