All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.jkcode.jkmvc.common._Timer.kt Maven / Gradle / Ivy

package net.jkcode.jkmvc.common

import io.netty.util.HashedWheelTimer
import io.netty.util.Timeout
import io.netty.util.TimerTask
import net.jkcode.jkmvc.scope.ClosingOnShutdown
import java.util.concurrent.TimeUnit

/**
 * 公共的毫秒级定时器
 *   HashedWheelTimer 是单线程的, 因此每个定时任务执行耗时不能太长, 如果有耗时任务, 则扔到其他线程池(如ForkJoinPool.commonPool())中处理
 */
public val CommonMilliTimer by lazy{
    HashedWheelTimer(1, TimeUnit.MILLISECONDS, 256 /* 2的次幂 */)
}

/**
 * 公共的秒级定时器
 *   HashedWheelTimer 是单线程的, 因此每个定时任务执行耗时不能太长, 如果有耗时任务, 则扔到其他线程池(如ForkJoinPool.commonPool())中处理
 */
public val CommonSecondTimer by lazy{
    HashedWheelTimer(200, TimeUnit.MILLISECONDS, 64 /* 2的次幂 */)
}

/**
 * 添加周期性任务
 * @param task 任务
 * @param period 周期时间
 * @param unit 时间单位
 * @return
 */
public fun HashedWheelTimer.newPeriodic(task: () -> Unit, period: Long, unit: TimeUnit): Timeout{
    // 定时触发
    return newTimeout(object : TimerTask {
        override fun run(timeout: Timeout) {
            // 执行任务
            task.invoke()

            // 递归
            newTimeout(this, period, unit)
        }
    }, period, unit)
}

/**
 * 关闭定时器
 */
public val timerCloser = object: ClosingOnShutdown(){
    override fun close() {
        CommonMilliTimer.stop()
        CommonSecondTimer.stop()
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy