我的代码中有一个线程清理器,如果超出了DB容量,则会在每次插入数据库时检查容量。我想为这个清洁工添加更多功能,并在文件数超过时清理,比方说10000文件。新功能应该按计划运行。
我希望能够以两种方式清理数据库:
1.按需。
2.预定,每天X小时。
使用哪个并发java类? 如何确保上述两种方式使用相同的线程?
答案 0 :(得分:3)
执行DB清理的代码应该完全从调度中分离出来(单一责任原则),这样你就可以随时从其他代码中执行它。
至于调度,我建议您查看Quartz scheduler,熟悉CRON,以便将其提取到属性,以便在不修改代码的情况下更改调度触发器。
您应该同步代码,以便同时执行不超过一次清理,标准synchronize
应该很容易。
如果您希望使其非常简单并且不想添加新的依赖项,则可以使用标准Java解决方案:Timer。 Timer#scheduleAtFixedRate可以提供固定费率执行。这意味着每当出现新要求时,您都必须添加额外的代码(例如,不要在周末安排)。