zoukankan      html  css  js  c++  java
  • ScheduledThreadExecutor定时任务线程池

      ScheduledThreadPoolExecutor 继承自ThreadPoolExecutor实现了ScheduledExecutorService接口。主要完成定时或者周期的执行线程任务。

      代码如下:

    package com.itszt.test3;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;
    /**
     * ScheduledThreadExecutor,定时任务线程池
     */
    public class Test3 {
        public static void main(String[] args) {
            ScheduledExecutorService pool = Executors.newScheduledThreadPool(10);
            System.out.println("main开始时间:"+MyRunnable.now());
            for(int i=0;i<3;i++){
                MyRunnable myRunnable = new MyRunnable("thread-" + i);
                System.out.println(myRunnable.getName()+"开始时间:"+MyRunnable.now());
                pool.schedule(myRunnable,5, TimeUnit.SECONDS);//延时5秒执行
                //在一次调用完成和下一次调用开始之间有长度为delay的延迟
                //pool.scheduleWithFixedDelay(myRunnable,5,5,TimeUnit.SECONDS);
            }
            try {
                Thread.sleep(7000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            pool.shutdown();//7秒后不再接受执行线程
            while (!pool.isTerminated()){
                //等待所有线程结束
            }
            System.out.println("main结束时间:"+MyRunnable.now());
        }
    }
    class MyRunnable implements Runnable{
        private String name;
    
        public MyRunnable(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        @Override
        public void run() {
            System.out.println(getName()+"true start:"+now());
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(getName()+"true end:"+now());
        }
        static String now(){
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return format.format(new Date());
        }
    }
    

      代码执行结果如下:

    main开始时间:2018-03-24 21:08:06
    thread-0开始时间:2018-03-24 21:08:06
    thread-1开始时间:2018-03-24 21:08:06
    thread-2开始时间:2018-03-24 21:08:06
    thread-1true start:2018-03-24 21:08:11
    thread-2true start:2018-03-24 21:08:11
    thread-0true start:2018-03-24 21:08:11
    thread-2true end:2018-03-24 21:08:14
    thread-0true end:2018-03-24 21:08:14
    thread-1true end:2018-03-24 21:08:14
    main结束时间:2018-03-24 21:08:14  
  • 相关阅读:
    [引用]SQLServer占CPU100%
    负能量程序员杂谈(2)- 管理中的情和义
    负能量程序员杂谈(1)-世界上最单纯的职业:程序员
    FLV文件格式官方规范详解
    rtmp官方标准规范详细解析
    万恶的KPI、新兴的OKR及让人纠结的程序员考核
    管理点滴(一)
    选拨管理者的一个必要条件
    团队管理的简单总结:少即是多,体力透支,负能量管理,自我进化团队,沟通
    我的2015计划,目标
  • 原文地址:https://www.cnblogs.com/lizhangyong/p/8641480.html
Copyright © 2011-2022 走看看