2011-03-02 10 views
3

我有一個程序,我打算使用很多Timer對象,據我所知,每個Timer都運行在它自己的線程上。所以我想知道是否有可能啓動這麼多的定時器,以至於太多的線程會影響程序的性能。我可以使用Timer對象飽和程序嗎?

例如,我想有幾個(布爾,定時器)對有布爾值在幾個不同的時間間隔反轉。

+0

是的,你可以。不要這樣做:-) – 2011-03-02 02:01:52

回答

3

是的,Timer對象確實會消耗線程資源,所以有可能在JVM中達到限制。如果您的目標是安排任務在各個時間點運行,您可能需要查看許多Java ExecutorService實現中的其中一個,例如ScheduledThreadPoolExecutorExecutors類爲生成這些對象提供了一個方便的工廠。多個實現利用線程池,您可以配置它們來確定可同時運行多少個任務。如果您的程序需要退出,您還可以消耗任務產生的輸出(如果有的話)並按順序關閉任務。

+0

從Java 1.5開始,ScheduledExecutorServie是安排定時任務的推薦方式。這取決於你做了什麼,但個人而言,我認爲像幾百個線程(定時器)是實際的最大值。 – 2011-03-02 03:03:57

0

您可以在同一個定時器上運行多個任務。根據cpu密集型任務的不同,可以只使用一個或幾個Timer實例來管理所有任務。或者像@Rob提到的那樣,你可以使用ScheduledThreadPoolExecutor。

相關問題