您好,登錄后才能下訂單哦!
springBoot @Scheduled如何實現多個任務同時開始執行,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
如下代碼即可:
@Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskExecutor = new ThreadPoolTaskScheduler(); taskExecutor.setPoolSize(50); return taskExecutor; }
定時任務重復時,只有一個可以執行。
如下
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @Component public class MyScheduled { @Scheduled(cron = "0/5 * * * * ?") public void execute1(){ String curName = Thread.currentThread().getName() ; System.out.println("當前時間:"+LocalDateTime.now()+" 任務execute1對應的線程名: "+curName); try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } } @Scheduled(cron = "0/5 * * * * ?") public void execute2(){ String curName = Thread.currentThread().getName() ; System.out.println("當前時間:"+LocalDateTime.now()+" 任務execute2對應的線程名: "+curName); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
通過執行可以看到,打印線程名稱為同一個。即如果不手動指定線程池,則默認啟動單線程,進行執行定時任務。
需要手動指定線程池,如下
import org.springframework.context.annotation.Bean; import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @Component @EnableScheduling public class MyScheduled { @Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setPoolSize(50); return taskScheduler; } @Scheduled(cron = "0/5 * * * * ?") public void execute1(){ String curName = Thread.currentThread().getName() ; System.out.println("當前時間:"+LocalDateTime.now()+" 任務execute1對應的線程名: "+curName); try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } } @Scheduled(cron = "0/5 * * * * ?") public void execute2(){ String curName = Thread.currentThread().getName() ; System.out.println("當前時間:"+LocalDateTime.now()+" 任務execute2對應的線程名: "+curName); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
此時,多個定時任務,是不通的線程執行,同時,定時任務可以重疊執行。
關于springBoot @Scheduled如何實現多個任務同時開始執行問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。