我想每隔5秒调用一次方法, 我使用了计时器,但我不知道如何正确使用它。
我在一个CountryDTO课程中有一个方法,如下所示。
public MoviesDTO getMovieDTOByName(String movieName) {
Session session = factory.openSession();
String hql = "FROM MoviesDTO WHERE name=:nm";
Query query = session.createQuery(hql);
query.setParameter("nm", movieName);
return (MoviesDTO) query.uniqueResult();
}
我从主方法中调用它。如下所示:
public static void main(String[] args) {
Timer timer = new Timer();
CountryDAO countryDAO = new CountryDAO();
timer.schedule(countryDAO.getMovieDTOByName("Rabgo"), 5000);
}
但是,我得到的是以下异常:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method schedule(TimerTask, long) in the type Timer is not applicable for the arguments (MoviesDTO, int)
答案 0 :(得分:1)
使用Timer
不是一个好主意。如果您使用jdk 1.5或更高版本,请改用ScheduledThreadPoolExecutor
。
doc:https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html
原因:
答案 1 :(得分:0)
日志中显示有编译错误。方法schedule
需要2个参数(TimerTask
,long
)而不是您提供的(MoviesDTO
,int
)。
看看How to set a timer in Java(在你的帖子评论中被Masked Man提到)以获得解决方案
答案 2 :(得分:0)
有很多Quartz scheduler这样的第三方jar可用于Java。这种jar在内部为我们处理了所有必需的调度过程,我们可以专注于调度程序的业务逻辑。
Quartz基本上用于处理Java中的复杂计划。 在这种情况下,您必须了解cronjob。
您也可以参考CronMaker。
(注意:-这只是对您的建议。如果您的调度过程花了很多时间来处理,并且您偏离了用例,那么您可以继续执行此建议。)