java - 关于秒表或计时器或其他一些实用程序

标签 java

我有一个启动任务的要求。现在很多线程可以启动这个任务,这个任务通常需要 4-5 秒才能完成。如果某个任务已经由其他线程启动,我想阻止该任务的启动。 为了实现这个要求,我正在考虑每当某个线程启动任务时就在不同的线程中启动计时器或秒表。现在,当计时器在配置的时间间隔后超时时,另一个线程可以启动任务。 那么,在不同的线程中启动计时器或秒表来查看是否已达到特定时间是一个好的解决方案吗?有什么好的替代方案吗?

最佳答案

如果我理解正确的话,这是一个坏主意。基本上,您假设您的作业运行时间永远不会超过 5 秒,因此如果 watch 告诉您某项作业在不到 5 秒前开始,您将不会启动另一项作业。这是非常不可靠的。

而是创建某种在作业开始时设置并在作业结束时取消设置的标志。 AtomicBoolean 非常适合:

private AtomicBoolean flag = new AtomicBoolean();

//...

if(!flag.getAndSet(true)) {
    try {
        //do your work
    } finally {
        flag.set(false);
    }
} else {
    //Already running
}

如果您希望另一项作业等待前一项作业而不是简单地被丢弃,只需使用 synchronized 包围您的任务或使用某种不同的锁定机制即可。

注意:如果您的作业是分布式的,您将需要一个分布式锁定机制,例如数据库或 .

关于java - 关于秒表或计时器或其他一些实用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10699215/

相关文章:

java - 使用 Hibernate/JPA 映射和 JUnit 测试 DAO 的公式

java - 在oracle存储过程中传递数组

java - 求字符串数组的平均值

java - 如何在 struts2 迭代器中给出超链接

java - <class> 的类型是 netbeans 中的错误错误

java - 为什么我需要在通知观察者之前调用 setChanged?

java - 允许用户使用 Javascript API 下载由 Java applet 生成的文件

java - Try/Catch 对构造类构造函数中抛出异常的影响

java - 聊天应用程序的 recyclerview 不显示任何数据或 View

java - 添加帮助内容,使用命令框架搜索帮助