我有一个程序,我计划使用很多Timer对象,据我所知,每个Timer都运行在它自己的线程上。所以我想知道是否有可能启动这么多计时器,它会伤害程序的性能,线程太多。
例如,我想有几个(布尔,计时器)对可以在几个不同的时间间隔内反转布尔值。
答案 0 :(得分:3)
是的,Timer
对象确实消耗了线程资源,因此可以在JVM中达到限制。如果您的目标是安排任务在不同时间点运行,那么您可能希望查看许多Java ExecutorService实现中的一个,例如ScheduledThreadPoolExecutor。 Executors类为生成这些对象提供了方便的工厂。有几个实现使用线程池,您可以配置线程池以确定可以同时运行的任务数。您还可以使用任务生成的输出(如果有),并在程序需要退出时以有序的方式关闭任务。
答案 1 :(得分:0)
您可以在同一个Timer上运行多个任务。根据任务的cpu密集程度,您可以只使用一个或几个Timer实例来管理所有任务。或者,如@Rob所述,您可以使用ScheduledThreadPoolExecutor。