1. 程式人生 > 實用技巧 >quartz任務執行完之後再執行下一輪任務 避免頻率過快併發情況

quartz任務執行完之後再執行下一輪任務 避免頻率過快併發情況

原文:https://www.cnblogs.com/eagle-xie/p/8657395.html

預設情況下,當Job執行時間超過間隔時間時,排程框架為了能讓任務按照我們預定的時間間隔執行,會馬上啟用新的執行緒執行任務。

若我們希望當前任務執行完之後再執行下一輪任務,也就是不要併發執行任務,該如何解決呢?

第一種方法:設定quartz.threadPool.threadCount 最大執行緒數為 1。這樣到了第二次執行任務時,若當前還沒執行完,排程器想新開一個執行緒執行任務,但我們卻設定了最大執行緒數為 1 個(即:沒有足夠的執行緒提供給排程器),則排程器會等待當前任務執行完之後,再立即排程執行下一次任務。(注意:此方法僅適用於Quartz中僅有一個Job,如果有多個Job,會影響其他Job的執行)

第二種方法:在 Job 類的頭部加上[DisallowConcurrentExecution],表示禁用併發執行。(推薦使用此方法)

//不允許此 Job 併發執行任務(禁止新開執行緒執行)
[DisallowConcurrentExecution]
public class Job1 : IJob
{
}