如何一次只运行一次功能

时间:2019-09-10 17:51:40

标签: java

我的应用程序具有Spring Boot应用程序,我希望以此方式保护此功能,以便在一个应用程序的生命期内,该功能一次只能工作一次。

我已经尝试了两种方法-一种是关于stackvoerflow的另一种方法,但没有用。

Validator.run(() -> foo());
    private AtomicBoolean done = new AtomicBoolean();
    public void run(Runnable task) {
        if (done.get()) return;
        if (done.compareAndSet(false, true)) {
            task.run();
        }
    }

和第二个

private boolean alreadyExecuted = false; // as member
void foo(){
   if (!alreadyExecuted) {
      alreadyExecuted = true;
      doStuff();
      alreadyExecuted = false;
   }
}

第一种方法无论如何都允许功能一次运行几次,而第二种方法则根本不起作用。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您只需将您的方法设置为synchronized method

例如:

synchronized void doStuff() {
   // Do stuff
}