【发布时间】:2012-02-15 14:42:35
【问题描述】:
我的问题是:我有一个接受目录中文件的类。每当第一个对象到达时,它就会启动一些计时器来对目录中在接下来的 60 秒内到达的所有文件执行压缩。
这提出了两个要求:
1) 当新文件到达时,我需要能够检查“倒计时”是否已经在运行。我不希望 file2 在 file1 之后 15 秒到达,然后它们在 45 秒后一起压缩,只是在第一个完成后 15 秒触发第二个计划任务(到一个空目录)。
2) 智能批处理/非常量轮询。例如,如果 file1 在 time=0 到达,而 file2 在 time=59s 到达,它们将被一起压缩。但是,如果 file3 直到 time=89s 才到达,而 file4 在 time=129s 到达,我想确保下一个“压缩”操作不会发生在 timer=120s,而是发生在 timer=149s(60 秒后文件 3 到达)。
换句话说:应该只运行一个计时器/倒计时。如果它是压缩后的第一个文件,它应该触发一个新文件,否则它应该被忽略。
我正在研究 java.util.Timer 和 Java.util.concurent.ScheduledExecutorService 作为解决方案,但它们似乎都是为拥有多个进程而构建的,我试图避免这种情况。
有没有更好的解决方案?
【问题讨论】:
-
您如何收到文件已“到达”的通知? “到达”是什么意思 - 这是否意味着该文件已被创建它的任何应用程序完全写入和关闭?
-
我的班级被传递了一个文件,然后将其移动到正确的目录并在压缩前检查计时器/倒计时。
标签: java multithreading timer