zoukankan      html  css  js  c++  java
  • 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();
    		
    	}
        
    }
  • 相关阅读:
    mysql跟踪提交的SQL语句
    Xamarin.Forms 启动App时获取屏幕宽高
    vs for mac xamarin.forms 将pcl转换为netstandard后报错
    MAC显示文件夹路径
    MAC下使用Charles抓取安卓模拟器数据
    mysql不能插入中文
    Xamarin的不归路-使用Gorilla Player实时预览XAML
    sqlserver2008附加数据库时提示“无法为该请求检索数据。 (Microsoft.SqlServer.Management.Sdk.Sfc)”
    Xamarin的不归路-ios模拟器调整窗口大小
    Xamarin的不归路-ios模拟器没有键盘
  • 原文地址:https://www.cnblogs.com/ywqbj/p/5593746.html
Copyright © 2011-2022 走看看