2010-04-14 65 views
5

我在web應用程序中安排作業有一個問題。如果我們必須在Web應用程序中安排作業,我們可以使用java util Timer/TimerTask或Quartz(還有其他調度機制,但我認爲Quartz)。我正在考慮使用哪一個,當我點擊該網站http://oreilly.com/pub/a/java/archive/quartz.html?page=1時說,使用計時器會產生不良影響,因爲它會在最後一行創建一個超出容器控制的線程。其他頁面討論Quartz及其功能,但我可以讀懂Quartz也使用線程和/或線程池來安排任務。我的猜測是這些線程也不在容器控制之下在Web應用程序中的石英

有人可以向我澄清這個 在我的Web應用程序中使用Quartz是否安全而不會創建懸掛線程或線程鎖定問題? 在此先感謝

回答

2

有人可以向我澄清這是否可以安全地在我的Web應用程序中使用Quartz而不會創建懸掛線程或線程鎖定問題?

石英和JDK Timer都啓動了無法訪問Java EE上下文信息的非託管線程,這是最大的問題。 此外,他們可以在沒有[應用程序服務器]瞭解的情況下使用資源,存在管理員無法控制其數量和資源使用情況,並妨礙應用程序服務器正常關閉或從故障中恢復資源的能力(請參閱Unmanaged threads )。有這個說法,我沒有面對掛線或鎖定問題(我想這取決於你在做什麼,但他們)。

如果真的這是一個問題,請考慮使用JSR-237定時器和WorkManager實現(與託管線程一起工作),如Foo-CommonJ而不是石英或JDK計時器。

1

兩種方法都創建了非託管線程。我使用Quartz進行調度,而不是java Timer,因爲它提供了更多的靈活性(例如cron表達式),並且它更易於管理。

1

如果我必須在一行中說,我會說使用Quartz,因爲它會照顧到爲您管理與調度相關的低級別工作。使用定時器,您可以完成石英所做的一切(甚至可以讓定時器線程繼續輪詢以檢查Web應用程序是否正在運行並退出)。但是這需要由您的代碼完成。使用Quartz,你可以開箱即用。

現在詳細 Quartz提供 1.工作持續 2.管理線程池,以便在創建線程的適當數量,使以後的工作等待。 3.初始化servlet與您的Web應用程序集成。當應用程序關閉時,我認爲它需要關閉您的線程,但我沒有嘗試過。所以我不會對此發表評論。 4.基於RMI的調度,適用於集羣環境。

還有其他的,但這些是人們更頻繁使用石英的最大動力。