java 定时执行 打印

java定时打印,自己写的,望大师指教

import java.util.Timer;
import java.util.TimerTask;

public class TimerUtil2 {

	public static void main(String[] args) {
		Timer t=doSeconds();
		
		System.out.println(t);
		System.out.println("main:"+Thread.currentThread().getName());
		//运行线程和 TimerTask不是同一线程,可停止
//		t.cancel();
		
//		System.out.println(0%20==0);
//		System.out.println(1%20==0);
	}

	public static Timer doSeconds() {
		
		final Timer timer = new Timer();
		
		// schedule() 这个方法有三个参数,第一个参数是要运行的代码,第二个参数是从什么时候开始运行,第三个参数是每隔多久在运行一次。
	    timer.schedule(new TimerTask() {
	    	
	    	int a=1;
	    	int maxSec=5;
	        @Override
	        public void run() {
//	            Date dd = new Date();
//	            System.out.println(dd);
	        	
	        	if (a>maxSec) {
	        		System.out.println("run:"+Thread.currentThread().getName());
	        		System.out.println("大于最大设定秒数,计时结束");
					timer.cancel();
					return;
				}
	        	
	        	if (a%20==0) {
	        		System.out.println(a);
				}else {
					System.out.print(a+" ");
				}
	        	
	        	a++;
	        }
	    },1000,1000);
	    
	    return timer;
	}

}

 Timer类的方法

schedule(TimerTask task, Date firstTime, long period) 
         安排指定的任务在指定的时间开始进行重复的固定延迟执行

schedule(TimerTask task, long delay, long period) 
          安排指定的任务从指定的延迟后开始进行重复的固定延迟执行

schedule(TimerTask task, Date time) 
          安排在指定的时间执行指定的任务。

schedule(TimerTask task, long delay) 
          安排在指定延迟后执行指定的任务。

scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 
          安排指定的任务在指定的时间开始进行重复的固定速率执行

区别详见文档

---------------------------------------------------------

每天指定时刻任务

可参考:http://www.open-open.com/lib/view/open1338175095183.html

 这个例子有点不完善,应在listener的destory中终止timer

 

public class TimerManager {

 //时间间隔
 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
 
 public TimerManager() {
  Calendar calendar = Calendar.getInstance(); 
       
  /*** 定制每日2:00执行方法 ***/ 

  calendar.set(Calendar.HOUR_OF_DAY, 2);
  calendar.set(Calendar.MINUTE, 0);
  calendar.set(Calendar.SECOND, 0);
  
  Date date=calendar.getTime(); //第一次执行定时任务的时间
  
  //如果第一次执行定时任务的时间 小于 当前的时间
  //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
  if (date.before(new Date())) {
      date = this.addDay(date, 1);
  }
  
  Timer timer = new Timer();
  
  NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
  //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
  timer.schedule(task,date,PERIOD_DAY);
 }

 // 增加或减少天数
 public Date addDay(Date date, int num) {
  Calendar startDT = Calendar.getInstance();
  startDT.setTime(date);
  startDT.add(Calendar.DAY_OF_MONTH, num);
  return startDT.getTime();
 }
 
}
  在 TimerManager 这个类里面,大家一定要注意 时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后

 

发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。为了,避免这种情况
发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。

public class NFDFlightDataTimerTask extends TimerTask {

 private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);

 @Override
 public void run() {
  try {
   //在这里写你要执行的内容
   
  } catch (Exception e) {
   log.info("-------------解析信息发生异常--------------");
  }
 }
}

public class NFDFlightDataTaskListener implements ServletContextListener {
 
 public void contextInitialized(ServletContextEvent event) {
  new TimerManager();
 }

 public void contextDestroyed(ServletContextEvent event) {
 }

}

 然后要在web.xml里面配置监听器

<listener>
 <listener-class>
  com.listener.NFDFlightDataTaskListener
 </listener-class>
</listener>

 

----------------------------------

还有一个例子,比较简洁

http://www.blogjava.net/fastunit/archive/2008/02/15/180116.html

 

本例依据Java自身提供的接口实现,通过监听器(Listener)和定时器(Timer)定时执行某个任务(Task)。

MyListener:

import  java.util.Timer;
import  javax.servlet.ServletContextEvent;
import  javax.servlet.ServletContextListener;

public   class  MyListener  implements  ServletContextListener {
  
  
private  Timer timer  =   null ;

  
public   void  contextInitialized(ServletContextEvent event) {
    timer 
=   new  Timer( true );
    
// 设置任务计划,启动和间隔时间
    timer.schedule( new  MyTask(),  0 86400000 );
  }

  
public   void  contextDestroyed(ServletContextEvent event) {
    timer.cancel();
  }
  
}


MyTask:

import  java.util.TimerTask;

public   class  MyTask  extends  TimerTask {

  
public   void  run() {
    
//  System.out.println("call at " + (new Date()));
    
//  TODO 此处添加具体任务代码
  }

}


web.xml配置:

< listener >
< listener-class > com.fastunit.samples.listener.MyListener </ listener-class >
</ listener >

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Scheduler是一个用于定时执行任务的工具。在Java中,可以使用Quartz框架来实现定时任务的调度。首先,需要创建一个实现了org.quartz.Job接口的类,并实现其中的execute方法。这个方法定义了任务的具体逻辑。例如,可以使用SimpleDateFormat来格式化当前时间,并将其打印出来。\[2\]然后,可以使用TimerManager类来设置任务的执行时间间隔。可以通过设置PERIOD变量来指定时间间隔。\[1\]最后,可以使用Quartz框架的调度器来启动定时任务。Quartz可以与J2EE和J2SE应用程序相结合,也可以单独使用。它可以用来创建简单或复杂的日程表,可以运行多个任务,甚至可以处理成千上万个任务。任务可以是标准的Java组件或EJBs。\[3\] #### 引用[.reference_title] - *1* [java起一个定时任务,在规定的时间内自动执行](https://blog.csdn.net/weixin_36296063/article/details/114753248)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Java实现定时任务 Schedule](https://blog.csdn.net/pan_junbiao/article/details/109328069)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值