`
stoneuu
  • 浏览: 46491 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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(), 086400000);
  }

  
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>

 

分享到:
评论

相关推荐

    JAVA定时运行程序

    ### JAVA定时运行程序知识点解析 #### 一、概述 在Java编程中,实现定时任务是一项常见且实用的功能。本文将详细介绍如何使用`java.util.Timer`类来创建一个能够定时执行特定任务的应用程序。通过分析提供的代码...

    java 定时执行

    ### Java定时执行任务详解 #### 一、Java定时任务实现方式概述 在Java中实现定时任务的方法有很多,这里主要介绍一种常见的实现方式:利用`java.util.Timer`类来完成定时任务的调度。`Timer`类提供了多种方法来...

    java版简易定时提醒

    通过以上步骤,我们就完成了一个简单的Java定时提醒器。这个程序可以集成到更大的项目中,或者作为独立的小工具使用。在实际开发中,还可以考虑使用更高级的定时框架如Quartz,提供更复杂的定时策略和更好的线程管理...

    java线程定时启动

    ### Java线程定时启动知识点详解 #### 一、概述 在Java编程中,有时我们需要让某个任务或操作在特定的时间点或每隔一段时间自动执行一次。这通常被称为“定时任务”。Java标准库提供了几种不同的方式来实现定时...

    java Timer 定时每天凌晨1点执行任务

    Java Timer 定时每天凌晨1点执行任务 在Java中,Timer类是一个非常有用的工具类,它可以帮助我们实现定时任务的执行。在本篇文章中,我们将学习如何使用Java Timer来实现每天凌晨1点执行任务的功能。 首先,让我们...

    定时执行任务例子 绝对好用

    // 在这里编写需要定时执行的代码 } } public class TimerManager { Timer timer = new Timer(); public void scheduleTask(MyTimerTask task, long delay, long period) { timer.schedule(task, delay, ...

    计划任务 定时执行

    在IT领域,计划任务和定时执行是至关重要的概念,它们被广泛应用于自动化流程、数据同步、备份策略以及各种定期维护任务。在这个例子中,我们关注的是如何设置计划任务来定时执行代码,比如定时上传文件或其他操作。...

    java简易的定时器

    - **属性**:包括定时执行时间`TIME`(默认为4秒),以及`Timer`对象`timer`。 - **方法**: - `startTimer(TimerTask timerTask)`: 启动定时任务,每`TIME`毫秒执行一次。 - `startAtFixedTimer(TimerTask ...

    Log4j定时打印日志及添加模块名配置的Java代码实例共

    总结起来,Log4j的定时打印日志功能结合模块名的配置,可以帮助开发者更好地管理和理解Java应用的运行状态。通过合理的配置和使用,可以提高问题定位的效率,同时为系统的健康运行提供有力保障。在实际项目中,根据...

    四步轻松搞定java web每天定时执行任务

    四步轻松搞定java web每天定时执行任务 在 Java Web 开发中,定时执行任务是非常常见的需求,例如每天凌晨2点执行某个任务。今天,我们将介绍如何使用 Java 实现每天定时执行任务。 知识点1:使用 Timer 和 ...

    JAVA定时器时间抓取

    - 定时任务执行:如每隔5秒打印一条消息。 - 日期格式化:使用`DateTimeFormatter`将日期转换为特定格式的字符串。 - 日期比较:比较两个日期是否相等、哪个早等。 - 时间戳操作:获取当前时间戳,以及将时间戳...

    day009 java基础进阶-定时器,数据结构.doc

    - 定时器在Java中用于安排在将来某个时间点执行的任务。它使用`java.util.Timer`类和`java.util.TimerTask`类来实现。`TimerTask`是实现定时任务的基础,它是一个抽象类,你需要创建其子类并重写`run()`方法来定义...

    使用java执行定时任务示例

    总的来说,这个示例涵盖了Java定时任务的基础,包括创建 `Timer` 实例,定义 `TimerTask`,以及调度和执行这些任务。通过学习这个示例,你可以了解到如何在Java应用程序中实现定时任务,无论是简单的延迟执行还是...

    crontab执行时间与系统时间不一致问题解决

    cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。  service crond start //启动服务  service crond stop //关闭服务  service crond restart //重启服务  service crond reload //...

    JavaService-2.0.10

    这样的功能对于需要长期运行且无需用户交互的Java应用非常有用,比如服务器端应用或者定时任务。 首先,我们需要了解什么是Windows服务。在Windows操作系统中,服务是一种在后台运行的程序,它们在用户登录之前就...

    java 查看JVM中所有的线程的活动状况

    2. 可运行(RUNNABLE):线程正在Java虚拟机中执行。 3. 阻塞(BLOCKED):线程在等待监视器锁。 4. 等待(WAITING):线程在无限期等待另一个线程执行特定操作,如调用`wait()`方法。 5. 定时等待(TIMED_WAITING)...

    详解java定时任务

    以下是一个简单的Java定时任务示例,任务将在3秒后执行: ```java public class TimerTest01 { Timer timer; public TimerTest01(int time){ timer = new Timer(); timer.schedule(new TimerTaskTest01(), time...

    java自动创建和读取XML文档

    在MyEclipse这样的集成开发环境中,你可以方便地调试和运行代码,观察结果。此外,注意异常处理,如`IOException`和`SAXException`,确保程序的健壮性。 总之,这个项目为你提供了一个实践平台,通过它你可以深入...

    IntelliJ IDEA中创建Spring boot项目,定时任务测试

    在控制台可以看到定时打印的“定时任务正在执行...”。 2. **调试和调整**:根据日志输出或业务需求,可以对定时任务的执行逻辑进行调整,如修改`@Scheduled`中的cron表达式,改变执行频率。 3. **单元测试**:为...

Global site tag (gtag.js) - Google Analytics