<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      定時任務幫助類
      package com.xcg.webapp.common;
      
      import java.util.HashMap;
      import java.util.Map;
      import java.util.concurrent.Executors;
      import java.util.concurrent.ScheduledFuture;
      import java.util.concurrent.ScheduledThreadPoolExecutor;
      import java.util.concurrent.TimeUnit;
      
      /**
       * 定時任務幫助類
       * final類不可以繼承
       * */
      public final class ScheduledThreadUtil {
          /**
           * 不可以創建新對象
           */
          private ScheduledThreadUtil() {
          }
      
          /**
           * 存儲定時任務
           * */
          private static final Map<String, ScheduledFuture> scheduledFutureMap = new HashMap<>();
      
          /**
           * 可調度線程池
           * */
          private static ScheduledThreadPoolExecutor threadPoolExecutor = null;
      
          /**
           * 保持線程池單實例
           * */
          public static ScheduledThreadPoolExecutor getThreadPoolExecutorInstance() {
              if (threadPoolExecutor == null) {
                  synchronized (ScheduledThreadUtil.class) {
                      if (threadPoolExecutor == null) {
                          threadPoolExecutor = (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(16);
                      }
                  }
              }
              return threadPoolExecutor;
          }
      
          /**
           * 執行定時任務
           * @param key          任務的唯一標識,用于避免重復添加相同任務。
           * @param job          需要執行的任務,實現了Runnable接口。
           * @param initialDelay 任務首次執行的延遲時間(秒)。
           * @param period       任務執行的周期時間(秒)。
           */
          public static void doJob(String key, Runnable job, long initialDelay, long period) {
              //避免重復的任務
              if (!scheduledFutureMap.containsKey(key)) {
                  getThreadPoolExecutorInstance();
                  // 參數1: task任務;
                  // 參數2: 首次執行任務的延遲時間;
                  // 參數3: 周期性執行的時間;
                  // 參數4: 時間單位;
                  ScheduledFuture<?> task = threadPoolExecutor.scheduleAtFixedRate(job, initialDelay, period, TimeUnit.SECONDS);
                  scheduledFutureMap.put(key, task);
              }
          }
      
          /**
           * 執行定時任務(只執行一次)
           * @param key          任務的唯一標識,用于避免重復添加相同任務。
           * @param job          需要執行的任務,實現了Runnable接口。
           * @param initialDelay 任務首次執行的延遲時間(秒)。
           * */
          public static void doJobOnce(String key, Runnable job, long initialDelay) {
              //避免重復的任務
              if (!scheduledFutureMap.containsKey(key)) {
                  getThreadPoolExecutorInstance();
                  // 參數1: task任務;
                  // 參數2: 首次執行任務的延遲時間;
                  // 參數3: 時間單位;
                  ScheduledFuture<?> task = threadPoolExecutor.schedule(job, initialDelay, TimeUnit.SECONDS);
                  scheduledFutureMap.put(key, task);
              }
          }
      
          /**
           * 執行定時任務(指定執行次數)
           * @param key           任務的唯一標識,用于避免重復添加相同任務。
           * @param job           需要執行的任務,實現了Runnable接口。
           * @param initialDelay  任務首次執行的延遲時間(秒)。
           * @param period        任務執行的周期時間(秒)。
           * @param times         任務執行的次數。
           * @param taskConsuming 單次任務執行的大概耗時(秒數)。
           * */
          public static void doJobSomeTimes(String key, Runnable job, long initialDelay, long period, int times,long taskConsuming) {
              for (int k = 0; k < times; k++) {
                  String idxKey = key + "_" + (k + 1);
                  getThreadPoolExecutorInstance();
                  // 參數1: task任務;
                  // 參數2: 首次執行任務的延遲時間;
                  // 參數3: 時間單位;
                  if (k == 0) {
                      ScheduledFuture<?> task = threadPoolExecutor.schedule(job, initialDelay, TimeUnit.SECONDS);
                      scheduledFutureMap.put(idxKey, task);
                  } else {
                      //下一次執行任務需要延遲多少時間
                      long nextJobDelay = initialDelay + ((period + taskConsuming) * k);
                      ScheduledFuture<?> task = threadPoolExecutor.schedule(job, nextJobDelay, TimeUnit.SECONDS);
                      scheduledFutureMap.put(idxKey, task);
                  }
              }
          }
      
          /**
           * 停止定時任務(非強制,如果正在執行,會等待執行完成后再關閉。)
           */
          public static void removeJob(String key) {
              if (scheduledFutureMap.containsKey(key)) {
                  ScheduledFuture<?> task = scheduledFutureMap.get(key);
                  if (task != null) {
                      task.cancel(false);
                  }
                  scheduledFutureMap.remove(key);
              }
          }
      
          /**
           * 停止定時任務(非強制,如果正在執行,會等待執行完成后再關閉。)
           */
          public static void removeTimesJob(String key, int times) {
              for (int k = 0; k < times; k++) {
                  String idxKey = key + "_" + (k + 1);
                  if (scheduledFutureMap.containsKey(idxKey)) {
                      ScheduledFuture<?> task = scheduledFutureMap.get(idxKey);
                      if (task != null) {
                          task.cancel(false);
                      }
                      scheduledFutureMap.remove(idxKey);
                  }
              }
          }
      
          /**
           * 停止全部任務(非強制,如果正在執行,會等待執行完成后再關閉。)
           */
          public static void removeAllJob() {
              if (threadPoolExecutor != null) {
                  threadPoolExecutor.shutdown();
              }
              scheduledFutureMap.clear();
          }
      
          /**
           * 是否已經存在job
           * */
          public static boolean existsJob(String key) {
              return scheduledFutureMap.containsKey(key);
          }
      }

      測試

              //設置定時任務
              ScheduledThreadUtil.doJob("job1", new Runnable() {
                  @Override
                  public void run() {
                      System.out.println("定時任務1,每1秒執行一次:" + DateUtil.format(new Date(), DateUtil.DF_YYYY_MM_DDHHMMSS));
                  }
              }, 1, 1);
      
              ScheduledThreadUtil.doJob("job2", new Runnable() {
                  @Override
                  public void run() {
                      System.out.println("定時任務2,每5秒執行一次:" + DateUtil.format(new Date(), DateUtil.DF_YYYY_MM_DDHHMMSS));
                  }
              }, 1, 5);
      
              Thread.sleep(20000);
              ScheduledThreadUtil.removeJob("job1");
              Thread.sleep(20000);
              ScheduledThreadUtil.removeAllJob();

       每天11點執行一次

              //任務周期,每天執行一次任務。
              long periodSec = TimeUnit.DAYS.toSeconds(1);
              //當前時間
              Date nowDate = new Date();
              //當前時間戳
              long nowTime = nowDate.getTime() / 1000L;
              //目標時間
              String ymd = DateUtil.format(nowDate, DateUtil.DF_YYYY_MM_DD);
              Date targetDate = DateUtil.parse(ymd + " 11:38:00", DateUtil.DF_YYYY_MM_DDHHMMSS);
              //如果當前時間大于11點,則目標時間為明天的11點。
              if (nowDate.after(targetDate)) {
                  //加一天
                  targetDate = DateUtil.add(targetDate, Calendar.DAY_OF_MONTH, 1);
              }
              long nowTime11 = targetDate.getTime() / 1000L;
              //首次延遲時間,單位為秒。
              long initialDelay = nowTime11 - nowTime;
              ScheduledThreadUtil.doJob("job3", new Runnable() {
                  @Override
                  public void run() {
                      System.out.println("定時任務3,每天的11點執行一次:" + DateUtil.format(new Date(), DateUtil.DF_YYYY_MM_DDHHMMSS));
                  }
              }, initialDelay, periodSec);

       

      posted on 2023-08-10 09:24  邢帥杰  閱讀(83)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲美免无码中文字幕在线| 国产国产久热这里只有精品| 国产精品色三级在线观看| 久久亚洲精品中文字幕馆| 亚洲第一区二区快射影院| 精品国产乱码久久久久APP下载| 蜜桃臀av在线一区二区| 国产精品国产精品无卡区| 婷婷久久香蕉五月综合加勒比 | 亚洲夜色噜噜av在线观看| 色成年激情久久综合国产| 五月婷婷深开心五月天| 韩城市| 日本不卡码一区二区三区| 亚洲精品综合一区二区在线| 中文字幕人成无码免费视频| 四虎精品永久在线视频| 国产午夜精品视频在线播放 | 成人免费乱码大片a毛片| 激情亚洲一区国产精品| 国产亚洲精品VA片在线播放| 啊轻点灬大JI巴太粗太长了在线| 99精品国产中文字幕| 国精产品一品二品国精在线观看| WWW丫丫国产成人精品| 丝袜美腿亚洲综合第一页| 亚洲蜜桃av一区二区三区| 国产成人无码免费视频在线| 一区二区丝袜美腿视频| 2019国产精品青青草原| 精品国产乱码久久久久久口爆网站| WWW丫丫国产成人精品| 韩国美女福利视频在线观看| 亚洲av无码精品色午夜| 久久精品不卡一区二区| 欧美亚洲精品中文字幕乱码| 精品无码一区二区三区电影| 柳河县| 国产真实乱对白精彩久久| 一卡二卡三卡四卡视频区| 久久av高潮av喷水av无码|