我有一个春季服务类:
@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做到这一点吗?否则,您可以尝试在字段上使用同步,从而失去多线程优势。
看来你的目标是你不希望method1
和method2
同时执行,建议使用JDK提供的某种实用程序进行并发控制