爲我的要求提供小背景以及迄今爲止完成的工作: 有18個計劃任務以固定間隔(至少30分鐘)運行將近5000名符合條件的員工輸入一個靜態方法進行迭代,併爲該員工和郵件生成郵件內容。一個平均的任務需要大約9分鐘乘以18將大約162分鐘,同時會有下一個任務將在隊列中(我假設)。 所以我的計劃是像下面的循環如何提高每運行n分鐘的循環的性能
try {
// Handle Arraylist of alerts eligible employees
Iterator employee = empIDs.iterator();
while (employee.hasNext()) {
ScheduledImplementation.getInstance().sendAlertInfoToEmpForGivenAlertType((Long)employee.next(), configType,schedType);
}
} catch (Exception vEx)
{
_log.error("Exception Caught During sending " + configType + " messages:" + configType, vEx);
}
因爲我知道有多少員工會來我的方法,我將劃分while循環爲兩個,並在時間上的兩個或三個員工進行同時操作。這可能嗎。或者還有其他方法可以提高性能。 有些至今
1.Wherever可能由靜態方法我已經實現的東西和變數太多
沒有刻意去捕捉異常併發送回,因爲這些是後臺任務。 (並且我認爲這會提高性能)
獲取一個查詢中的DB值而不是多個匹配。
如果我成功優化了while
循環,我想我可以節省幾分鐘。 感謝
當您執行sendAlertInfoToEmpForGivenAlertType時,發送郵件時是否阻止? EG:您是否等到在您返回並處理下一條記錄之前實際發送郵件? – Paul 2010-06-07 13:34:16
沒有。這不是線程安全的 – GustyWind 2010-06-07 13:39:50