2017-10-08 37 views
0

我有一个春季服务类:如何在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不是线程安全的。在不改变服务类的范围的情况下,我有什么选择使它成为线程安全的?能否使其变得易于解决目的? 我在发布之前已经搜索了解决方案,但无法找到一个。

回答

1

如果你的任一方法被调用,你是否试图只运行一次逻辑?如果是的话,你不能用@PostContruct预先做这个吗?否则,你可以尝试在现场使用同步,失去你的多线程优势。

0

看来,你的目标是你不想method1method2在同一时间执行,建议使用某种utilities通过JDK并发控制

提供
相关问题