在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ @Scheduled 多線程以及放置位置的問題

@Scheduled 多線程以及放置位置的問題

1 @Scheduled是不是必須放在spring管理的bean里?譬如有@Component @Controller @Service 注解的類里,放其他地方不起作用?

2 多線程任務(wù)下,例如下面所示,doTask1和doTask2之間可以異步進(jìn)行,但是假如doTask1的上一次任務(wù)還沒完成,5秒時(shí)間已過,下一次任務(wù)來了,是會(huì)開新線程進(jìn)行還是等待上一次任務(wù)完成再進(jìn)行?也就是說doTask1自己本身的任務(wù)之間是異步的還是同步的?如果是異步,如何同步?

   @Componenet
   @EnableAsync
   class MyClass{
        
       @Async
       @Scheduled(cron = "0/5 * *  * * ? ")
       void doTask1{
          ...
       }

       @Async
       @Scheduled(cron = "0 0/3 * * * ?")
       void doTask2{
          ...
       }
   
回答
編輯回答
過客

1,因?yàn)?@Scheduled 是spring的一個(gè)功能,要使用需要被掃描到才行行,所以才需要@Component等注解。
2,定時(shí)任務(wù)有兩種,一種是間隔多久執(zhí)行一次,這種必須要等到上一個(gè)任務(wù)執(zhí)行完畢才會(huì)開始下一個(gè)任務(wù),另一種是在特定的時(shí)間執(zhí)行,比如每小時(shí)的01分執(zhí)行,即使上一個(gè)任務(wù)沒有完成也會(huì)開始下一個(gè)任務(wù)。

2017年11月14日 06:28
編輯回答
拼未來

謝邀,@范閑 回答的已經(jīng)很好了,我就不啰嗦了。

2018年2月12日 22:25
編輯回答
落殤

問題1: 必須是Spring Bean才可以
問題2: 定時(shí)任務(wù)執(zhí)行扯不到“同步”“異步”上,你對(duì)這個(gè)東西的概念理解存在問題。
@Scheduled有兩種:

  1. fixedRate,固定頻率執(zhí)行,不等待上一次執(zhí)行結(jié)束,也就是說可能會(huì)存在重疊的情況
  2. fixedDelay,固定間隔執(zhí)行,上一次執(zhí)行結(jié)束后等待若干時(shí)間再執(zhí)行下一次

我認(rèn)為cron相當(dāng)于fixedRate,這個(gè)你自己試試就知道了。

但是因?yàn)锧Scheduled的執(zhí)行需要Executor,默認(rèn)是ScheduledThreadPool,所以要看線程池大小是多少。如果線程池大小就是1,那么就算是fixedRate也會(huì)表現(xiàn)得和fixedDelay類似,即等上一個(gè)執(zhí)行完畢后執(zhí)行下一個(gè)。

2017年11月6日 14:27