diff --git a/CHANGELOG.md b/CHANGELOG.md index 711e37565..e5217d2f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ * 【core 】 NumberUtil增加方法decimalFormat重载(issue#I3OSA2@Gitee) * 【extra 】 Ftp的remoteVerificationEnabled改为false(issue#I3OSA2@Gitee) ### 🐞Bug修复 +* 【core 】 修复createScheduledExecutor单位不是毫秒的问题(issue#I3OYIW@Gitee) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/thread/ThreadUtil.java b/hutool-core/src/main/java/cn/hutool/core/thread/ThreadUtil.java index 7dc251bdd..599146725 100644 --- a/hutool-core/src/main/java/cn/hutool/core/thread/ThreadUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/thread/ThreadUtil.java @@ -553,6 +553,32 @@ public class ThreadUtil { return new ScheduledThreadPoolExecutor(corePoolSize); } + /** + * 开始执行一个定时任务,执行方式分fixedRate模式和fixedDelay模式。
+ * 注意:此方法的延迟和周期的单位均为毫秒。 + * + * + * + * + * @param executor 定时任务线程池,{@code null}新建一个默认线程池 + * @param command 需要定时执行的逻辑 + * @param initialDelay 初始延迟,单位毫秒 + * @param period 执行周期,单位毫秒 + * @param fixedRateOrFixedDelay {@code true}表示fixedRate模式,{@code false}表示fixedDelay模式 + * @return {@link ScheduledThreadPoolExecutor} + * @since 5.5.8 + */ + public static ScheduledThreadPoolExecutor schedule(ScheduledThreadPoolExecutor executor, + Runnable command, + long initialDelay, + long period, + boolean fixedRateOrFixedDelay){ + return schedule(executor, command, initialDelay, period, TimeUnit.MILLISECONDS, fixedRateOrFixedDelay); + } + /** * 开始执行一个定时任务,执行方式分fixedRate模式和fixedDelay模式。 * @@ -565,23 +591,25 @@ public class ThreadUtil { * @param executor 定时任务线程池,{@code null}新建一个默认线程池 * @param command 需要定时执行的逻辑 * @param initialDelay 初始延迟 - * @param period 执行周期,单位毫秒 + * @param period 执行周期 + * @param timeUnit 时间单位 * @param fixedRateOrFixedDelay {@code true}表示fixedRate模式,{@code false}表示fixedDelay模式 * @return {@link ScheduledThreadPoolExecutor} - * @since 5.5.8 + * @since 5.6.5 */ public static ScheduledThreadPoolExecutor schedule(ScheduledThreadPoolExecutor executor, - Runnable command, - long initialDelay, - long period, - boolean fixedRateOrFixedDelay){ + Runnable command, + long initialDelay, + long period, + TimeUnit timeUnit, + boolean fixedRateOrFixedDelay){ if(null == executor){ executor = createScheduledExecutor(2); } if(fixedRateOrFixedDelay){ - executor.scheduleAtFixedRate(command, initialDelay, period, TimeUnit.NANOSECONDS); + executor.scheduleAtFixedRate(command, initialDelay, period, timeUnit); } else{ - executor.scheduleWithFixedDelay(command, initialDelay, period, TimeUnit.NANOSECONDS); + executor.scheduleWithFixedDelay(command, initialDelay, period, timeUnit); } return executor;