如何使 Spring 中的原始实例变量@Service线程安全的



我有一个春季服务类:

@Service
public class MyService {
  private boolean flag = false;
  public void method1() {
    if(!flag)
    // do something
    flag = true;
  }
  public void method2() {
    if(!flag)
    // do something
    flag = true;
  }
}

很明显,flag不是线程安全的。在不更改服务类的作用域的情况下,我可以使用哪些选项来使其具有线程安全状态?使其易变能解决目的吗?在这里发布之前,我已经搜索了解决方案,但找不到。

如果调用任一方法,您是否尝试仅运行一次某些逻辑?如果是,您不能提前用@PostContruct做到这一点吗?否则,您可以尝试在字段上使用同步,从而失去多线程优势。

看来你的目标是你不希望method1method2同时执行,建议使用JDK提供的某种实用程序进行并发控制

最新更新