gpt4 book ai didi

java - Spring MVC单例线程安全?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:43 26 4
gpt4 key购买 nike

我有一个单例 Spring bean(默认范围)。因此,一个实例将被多个线程使用。然而,我对线程安全有点困惑,显然所有 Spring bean 如果它们是无状态的,它们都是线程安全的,但我的 bean 不是无状态的,它有各种实例变量,每个请求/其他 Controller /类都使用这些变量。

这是我的单例 bean 的开头:

public class PcrfSimulator {

private final CustomGxSessionIdCacheImpl gxSessionIdCache = new CustomGxSessionIdCacheImpl();
private final PcrfRecord pcrfRec = new PcrfRecord();
private final ResponseConditions responseConditions = new ResponseConditions();

public CustomGxSessionIdCacheImpl getGxSessionIdCache() {
return gxSessionIdCache;
}

public ArrayList<Rule> getRules() {
return pcrfRec.getRules();
}

因此,上面的字段将被多个线程访问 - 是否足以将这些字段标记为易变的,或者我是否必须标记访问它们的方法(不仅在这个类中,而且在其他 Controller 中都有很多/类)与同步和使用等待/通知等?

非常感谢!

最佳答案

一旦 bean 被实例化、注入(inject)等,Spring 本身会确保正确发布它们。这意味着任何引用您的单例 bean 的线程至少会看到它在 Spring 上下文结束时的状态创建。

如果状态是不可变的,那么您就无事可做。

如果单例的状态是可变的,那么您将必须正确同步对该可变状态的访问。

关于java - Spring MVC单例线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9376291/

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