SingleThreadScheduledExecutor的使用简析

SingleThreadScheduledExecutor作用

一句话概括,创建一个可以周期性执行任务的单线程线程池。

示例代码

public class TestMain {
    //格式化
    static SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //AtomicInteger用来计数
    static AtomicInteger number = new AtomicInteger();


    public static void main(String[] args) throws Exception {
        ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
        for (int i = 0; i < 3; i++) {
            executorService.schedule(new Runnable() {
                @Override
                public void run() {
                    System.out.println("第" + number.incrementAndGet() + "周期线程运行当前时间【" + sim.format(new Date()) + "】");
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }, 3L, TimeUnit.SECONDS);
        }
        System.out.println("主线程运行当前时间【" + sim.format(new Date()) + "】");
    }
}

运行结果:
在这里插入图片描述

总结

可以看到,周期线程是在主线程时间3秒后执行的,而由于核心线程只有1个,所以每个任务都需要等待3秒,有了空闲线程才能执行。要注意的是第一个3秒间隔是我们设置的延时3秒,之后的3秒都是线程任务里设置的睡眠时间了。

发布了208 篇原创文章 · 获赞 204 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/104494106