我有一个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
不是线程安全的。在不改变服务类范围的情况下,我有哪些选项可以使其成为线程安全的?可以使其挥发性解决目的吗?
我在发布之前已经搜索了解决方案,但找不到解决方案。
答案 0 :(得分:1)
如果调用了任何一个方法,您是否只尝试运行一次逻辑?如果是的话,你不能用@PostContruct预先做到吗?否则,您可以尝试在字段上使用synchronized,从而失去多线程优势。
答案 1 :(得分:0)
您的目标似乎是您不希望method1
和method2
同时执行,建议使用JDK提供的某种utilities进行并发控制< / p>