多线程Executors之周期性执行任务

书籍

《Java并发编程的艺术》—方腾飞,第8章

场景说明

拉取kafka的数据,多线程把数据追加到HDFS文件里,要求每个医院每一天的数据存放在一个文件中,每个文件有一个锁,这些锁由一个Map维护。定期清理n天前的文件的锁对象(之前的文件不会再写入数据,所以这个文件的锁也没用了)。

这里简单实现周期性执行任务。

实例代码

1、任务类

package java7.thread.chapter2.test2;

import java.text.SimpleDateFormat;


public class C1 implements Runnable {


    @Override
    public void run() {
    	// 打印当前时间
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(format.format(System.currentTimeMillis()));
    }

}

2、测试

package java7.thread.chapter2.test2;

import java.text.SimpleDateFormat;
import java.util.concurrent.*;

public class Main {

    public static void main(String[] args) {
    	// 带调度策略的任务执行器
        ScheduledExecutorService pool = Executors.newScheduledThreadPool(16);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("开始:"+format.format(System.currentTimeMillis()));
       
        // C1:要周期性执行的任务
        // 2L:多久后第一次执行任务
        // 5L:以后每隔多久执行一次
        // TimeUnit.SECONDS:第二个和第三个参数的时间单位
        ScheduledFuture<?> schedule = pool.scheduleAtFixedRate(new C1(), 2L, 5L, TimeUnit.SECONDS);
    }
}

运行结果

07秒开始计时,2秒后第一次执行,以后每5秒执行一次,一直执行下去。。。
sssssssssssssssssssssssssssssssssssss

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值