时间轮-Netty自定义时间轮算法


时间轮类

public class NettyTimer {

    private final HashedWheelTimer timer;

    public NettyTimer(int tickDuration, int ticksPerWheel) {
        // 异步执行任务
        timer = new HashedWheelTimer(r -> new Thread(r,"HashedWheelTimer " + r.hashCode()),
                tickDuration, TimeUnit.MILLISECONDS, ticksPerWheel);
    }

    public void addTask(TimerTask task, long delay, TimeUnit unit) {
        timer.newTimeout(task, delay, unit);
    }

    public void addTimerTask(TimerTask task, long duration, TimeUnit unit) {
        // 在间隔时间后重复执行任务
        timer.newTimeout((timeout) -> {
            task.run(timeout);
            addTimerTask(task, duration, unit);
        }, duration, unit);
    }

    public void stop() {
        timer.stop();
    }

}

测试

class NettyTimerTest {

    @Test
    void addTask() throws InterruptedException {
        NettyTimer nettyTimer = new NettyTimer(1, 7);
        nettyTimer.addTimerTask((timeout) -> System.out.println("Hello World!"), 1, TimeUnit.SECONDS);
        Thread.currentThread().join();
    }

    @Test
    void stop() {
    }
}

依赖

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>5.0.0.Alpha2</version>
</dependency>

文章作者: 钱不寒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 钱不寒 !
  目录