在java中使用定时器还是线程池?

在java中使用定时器还是线程池?,java,multithreading,threadpool,Java,Multithreading,Threadpool,我有一个java应用程序,其中我需要安排命令在给定延迟后运行,我应该使用什么定时器或线程池,以及为什么?我建议您使用。理由:它比定时器或定时器任务更易于使用 例如,您可以使用获得一个。我建议您使用。理由:它比定时器或定时器任务更易于使用 例如,您可以使用获得一个解决方案。如果您使用的是Spring,则另一个解决方案是。只需使用该注释注释所需的方法,并指定要调用的延迟或特定时间。优点是您不需要实现Runnable的新类,也不需要关注多线程(尽管Executors框架很容易使用)。但是您需要具有带有

我有一个java应用程序,其中我需要安排命令在给定延迟后运行,我应该使用什么定时器或线程池,以及为什么?

我建议您使用。理由:它比
定时器
定时器任务
更易于使用


例如,您可以使用获得一个。我建议您使用。理由:它比
定时器
定时器任务
更易于使用


例如,您可以使用获得一个解决方案。

如果您使用的是Spring,则另一个解决方案是。只需使用该注释注释所需的方法,并指定要调用的延迟或特定时间。优点是您不需要实现Runnable的新类,也不需要关注多线程(尽管Executors框架很容易使用)。但是您需要具有带有注释的方法的类成为Springbean;此外,该方法需要返回void并且没有参数

其实很简单:

@Scheduled(fixedRate = 5000)//the method is called once every 5 seconds
public void myScheduledMethod() {
    //do you stuff
}

如果您使用的是Spring,另一个解决方案是。只需使用该注释注释所需的方法,并指定要调用的延迟或特定时间。优点是您不需要实现Runnable的新类,也不需要关注多线程(尽管Executors框架很容易使用)。但是您需要具有带有注释的方法的类成为Springbean;此外,该方法需要返回void并且没有参数

其实很简单:

@Scheduled(fixedRate = 5000)//the method is called once every 5 seconds
public void myScheduledMethod() {
    //do you stuff
}

谢谢你的建议,但我对实现不感兴趣,使用它还有其他理由吗?@Ankizalani是的,它很有效(tm),它是由真正了解自己的东西的人编写的,因此它基本上没有bug;)另外,您可以使用所有的
ExecutorService
,我记不起确切的场景,但我认为如果您有移动的“interval”,那么TimerTask的实现将很容易,因为您不需要每次都使用新的interval创建整个线程池。@Nambari您可以按任何时间间隔安排任何任务;当您启动一个
ScheduledExecutorService
时,您没有指定一个定义的时间间隔,这是您的空闲时间。请注意,它既可以执行一次快照,也可以执行周期,或者如果您使用,
.execute()
(它继承了
ExecutorService
),它可以立即执行。谢谢您的建议,但我不介意执行,使用它还有其他理由吗?@Ankizalani是的,它只起作用(tm),它是由真正了解自己的东西的人编写的,因此它基本上没有bug;)另外,您可以使用所有的
ExecutorService
,我记不起确切的场景,但我认为如果您有移动的“interval”,那么TimerTask的实现将很容易,因为您不需要每次都使用新的interval创建整个线程池。@Nambari您可以按任何时间间隔安排任何任务;当您启动一个
ScheduledExecutorService
时,您没有指定一个定义的时间间隔,这是您的空闲时间。请注意,它既可以执行单次快照,也可以执行周期性快照,或者如果您使用,比如说,
.execute()
(这是因为它继承了
ExecutorService
)。