我有一個應用程序檢查互聯網上的資源是否有新的郵件。如果有新郵件,它會對它們進行一些處理。這意味着根據郵件數量的不同,可能需要幾秒鐘的時間處理。調度任務,確保任務正在執行
現在執行處理的對象/程序已經是單例。所以現在我已經照顧到了那裏只有一個實例正在處理檢查和處理。
但是我現在只運行一次,我想不斷運行,每隔10分鐘或多或少地檢查一次新郵件以及時處理它們。
我明白我可以用Timer/Timertask來處理這個問題,甚至更好,我在這裏找到了一個資源:http://www.ibm.com/developerworks/java/library/j-schedule/index.html使用Scheduler/SchedulerTask。但是我擔心的是,如果我將它設置爲每10分鐘運行一次並且前一個會話正在處理數據,它會將新任務放入一個堆棧中,等待上一個任務完成後執行。所以我害怕的是例如第一次運行5小時,然後,因爲它一直很忙,之後它會在彼此檢查郵件和/或郵件後立即啓動5 * 6-1 = 29運行,做一些處理而不讓服務器休息一下。
有誰知道我該如何解決這個問題?
P.S.現在我的應用程序設置的方式是我在我的tomcat服務器上使用Java Servlet,該服務器在服務器啓動時啓動,它創建我的主程序的Singleton實例,然後調用一些方法執行提取/處理。我想要的是重複每一個「x」時間(10分鐘左右)的讀取/處理,確保實際上只有一個實例正在這樣做,並且在每次運行10分鐘左右之後真正停止。
你爲什麼不嘗試基於事件的方法;因此您的調度程序類將啓動可能需要不同時間的任務;在啓動此任務時,它還會註冊一個偵聽器,在偵聽器上它將偵聽進程完成事件;現在當變量持續的郵件處理任務完成時,調度程序將被通知。然後,調度程序可以在10分鐘後排入另一個任務以觸發。這也將確保不必要的任務不在任務隊列上排隊。 – Scorpion