@DisallowConcurrentExecution

郑某人1發表於2024-07-31

@DisallowConcurrentExecution

這個註解的作用是防止同一個 JobDetail 的多個例項同時執行。如果一個任務還在執行中,而排程器嘗試再次觸發該任務,則新的觸發會被阻塞,直到當前任務執行完成。也就是說,同一個任務在任意時間點上只能有一個例項在執行。

使用場景:

當你的任務不是執行緒安全的,或者任務的執行需要嚴格的順序時,可以使用這個註解。例如,任務執行過程中需要訪問某些共享資源,而這些資源的訪問不能併發進行時,就可以用這個註解來防止併發執行。

使用若依為例:

1,併發:是(使用@DisallowConcurrentExecution)

2,cron: 0/10 * * * * ?

3,執行程式碼

public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
    {
        try {TimeUnit.SECONDS.sleep(12); } catch (InterruptedException e) {throw new RuntimeException(e);}
        System.out.println(StringUtils.format(DateUtils.getTime()+" 執行多參方法: 字串型別{},布林型別{},長整型{},浮點型{},整形{}", s, b, l, d, i));
    }

4,控制檯列印

2024-07-31 16:46:02 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:46:12 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:46:22 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:46:32 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:46:42 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:46:52 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:47:02 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:47:12 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:47:22 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100

5,結論:每隔10s允許一次,併發操作

6,併發:否

7,控制檯列印

2024-07-31 16:48:34 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:48:46 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:48:58 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:49:10 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:49:22 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100
2024-07-31 16:49:52 執行多參方法: 字串型別ry,布林型別true,長整型2000,浮點型316.5,整形100

8,結論:每隔12s允許一次,獨立執行