如何在Spring @Service线程安全的内部创建原始实例变量?

时间:2017-10-08 06:08:58

标签: spring multithreading spring-mvc volatile

我有一个Spring服务类:

@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不是线程安全的。在不改变服务类范围的情况下,我有哪些选项可以使其成为线程安全的?可以使其挥发性解决目的吗? 我在发布之前已经搜索了解决方案,但找不到解决方案。

2 个答案:

答案 0 :(得分:1)

如果调用了任何一个方法,您是否只尝试运行一次逻辑?如果是的话,你不能用@PostContruct预先做到吗?否则,您可以尝试在字段上使用synchronized,从而失去多线程优势。

答案 1 :(得分:0)

您的目标似乎是您不希望method1method2同时执行,建议使用JDK提供的某种utilities进行并发控制< / p>