在java中有没有替代/更好的方法来做这个简单的逻辑?

Bal*_*a R 2 java

我有一个方法,比如说method1(),需要一段时间才能运行.在执行期间,如果再次调用method1(),则应该忽略它.我大概有这样的事情

    boolean mFlag = false;

    void method1()
    {
        if(!mFlag)
        {
           mFlag=true;

           // do Stuff

          mFlag=false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这有效.但我想知道是否有更好的方法来做到这一点,最好不要涉及任何标志.

Aff*_*ffe 6

是的,你应该真正使用java.util.concurrent.locks中的东西你的例子不是非常严格正确,布尔需要是volatile.

ReentrantLock lock = new ReentrantLock();

    void method1()
    {
        if(lock.tryLock())
        {
           try {
             if (!(lock.getHoldCount() > 1)) {
               //do Some Stuff
             }
          } finally {
            lock.unlock();
          }
        }
    }
Run Code Online (Sandbox Code Playgroud)

编辑以处理在重新插入时跳过执行,如评论中所述.不幸的是,使用内置库并没有很好的方法,因为它有点奇怪的用法,但我仍然认为使用内置库是一个更好的选择.