• ScheduledExecutorService定时周期执行指定的任务


    示例代码
    package com.effective.common.concurrent.execute;
    
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;
    
    public class Schedule {
    	
    	private static DateFormat dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
    	private static DateFormat dayFormat = new SimpleDateFormat("yy-MM-dd");
    	
    	private static ScheduledExecutorService excutor = Executors.newSingleThreadScheduledExecutor();
    	
    	/**
    	 * 按指定频率周期执行某个任务 <br>
    	 * 初始化延迟0ms开始执行,每隔5ms重新执行一次任务。
    	 */
    	public void fixedRate(){
    		excutor.scheduleAtFixedRate(new EchoServer(), //执行线程
    									0,  //初始化延迟
    									5000, //两次开始的执行的最小时间间隔
    									TimeUnit.MILLISECONDS //计时单位
    									);
    	}
    	
    	/**
    	 * 
    	 */
    	public void fixDelay(){
    		excutor.scheduleWithFixedDelay(new EchoServer(),//执行线程 
    				0, //初始化延迟
    				5000, //前一次执行结束到下一次执行开始的间隔时间
    				TimeUnit.MILLISECONDS);
    	}
    	
    	/**
    	 * 每天晚上8点执行一次
    	 */
        public void dayOfDelay(String time){
            ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);  
            long oneDay = 24 * 60 * 60 * 1000;  
            long initDelay  = getTimeMillis("20:00:00") - System.currentTimeMillis();  
            initDelay = initDelay > 0 ? initDelay : oneDay + initDelay;  
            executor.scheduleAtFixedRate(  
                    new EchoServer(),  
                    initDelay,  
                    oneDay,  
                    TimeUnit.MILLISECONDS); 
        }
        
            
        /**
         * 获取给定时间对应的毫秒数
         * @param string "HH:mm:ss"
         * @return
         */
    	private static long getTimeMillis(String time) {        
            try {
    			Date currentDate = dateFormat.parse(dayFormat.format(new Date()) + " " +time);
    			return currentDate.getTime() ;
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    		return 0;
    	}
    
    	public static void main(String[] args){
    		
    		Schedule schedule = new Schedule();
    		schedule.fixedRate();
    		schedule.fixDelay();
    		
    	}
        
    }
  • 相关阅读:
    Hadoop入门
    Redis缓存分布式高可用架构原理
    ES分布式搜索引擎架构原理
    Java锁,多线程与高并发,JUC并发包
    图算法--拓扑序列
    数据结构--数组模拟队列
    数据结构--数组模拟栈
    数据结构--数组模拟双链表
    数据结构--数组模拟单链表
    基础算法--双指针
  • 原文地址:https://www.cnblogs.com/ywqbj/p/5593746.html
Copyright © 2020-2023  润新知