12

场景是这样的:

在我的应用程序中,我打开了一个文件,对其进行了更新并保存。一旦文件保存事件被触发,它将执行一种方法abc()。但是现在,我想在保存事件被触发后添加延迟,比如 1 分钟。所以我添加了Thread.sleep(60000). 现在它abc()在 1 分钟后执行该方法。到目前为止一切正常。

但是假设用户在 1 分钟内保存了 3 次文件,则该方法在每 1 分钟后执行 3 次。在第一次保存调用最新文件内容后,我想在接下来的 1 分钟内只执行一次方法。

我该如何处理这种情况?

4

2 回答 2

15

使用TimerTimerTask

创建类型Timer为 in的成员变量YourClassType

让我们说:private Timer timer = new Timer();

你的方法看起来像这样:

public synchronized void abcCaller() {
    this.timer.cancel(); //this will cancel the current task. if there is no active task, nothing happens
    this.timer = new Timer();

    TimerTask action = new TimerTask() {
        public void run() {
            YourClassType.abc(); //as you said in the comments: abc is a static method
        }

    };

    this.timer.schedule(action, 60000); //this starts the task
}
于 2013-09-04T11:46:00.683 回答
0

如果您使用的是 Thread.sleep(),只需让静态方法将静态全局变量更改为可以用来指示阻塞方法调用的东西吗?

public static boolean abcRunning;
public static void abc()
{
    if (YourClass.abcRunning == null || !YourClass.abcRunning)
    {
        YourClass.abcRunning = true;
        Thread.Sleep(60000);
        // TODO Your Stuff
        YourClass.abcRunning = false;
    }
}

有什么理由这行不通吗?

于 2017-08-05T19:59:00.810 回答