`
leavesfly
  • 浏览: 5101 次
社区版块
存档分类
最新评论

java实现定时任务的三种方式

    博客分类:
  • java
阅读更多
    公司今天用到了一个控制台程序,感觉挺神奇的,打开源码看了一下其实也就是一个定时任务。看了很多帖子,但是发帖还是第一次,废话不多说,直奔主题吧。
    java有三种方式可以实现定时任务:普通Thread、TimeTask实现、ScheduledExecutorService实现。
    1.普通Thread实现方法
    这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下:
public static void main(String[] args) {
		
		Runnable runnable = new Runnable() {
			@Override
			public void run() {
				while ( true ) {
					System.out.println("任务执行了。。。");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		};
		Thread thread = new Thread(runnable);
		thread.start();
	}

    2.TimeTask实现方法
    普通Thread方法优点就是简单,但缺少了灵活性,TimeTask实现方法最主要的两个优点是:可以控制启动和取消任务的时间、第一次执行任务时可以指定想要delay的时间。
    实现的过程中Timer用于调度任务,TimeTask用户具体的实现,是线程安全的,代码如下:
public class Task extends TimerTask{

	@Override
	public void run() {
		System.out.println("task runing....");
	}

	public static void main(String[] args) {
		Timer timer = new Timer();
		timer.schedule(new Task(), 0, 1000);
	}
}


    3.ScheduledExecutorService实现方法
    ScheduledExecutorService是从Java SE 5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。
    相比于上两个方法,它有以下好处:
    相比于Timer的单线程,它是通过线程池的方式来执行任务的
    可以很灵活的去设定第一次执行任务delay时间
    提供了良好的约定,以便设定执行的时间间隔
    具体代码如下:
public class ScheduledExecutorServiceTask {

	/** 
	 * 以固定延迟时间进行执行 
	 * 本次任务执行完成后,需要延迟设定的延迟时间,才会执行新的任务 
	 */
	public static void executeFixedDelay(){
		
		ScheduledExecutorService scheduler  = Executors.newScheduledThreadPool(1);  
		
		int startTime=3;  	//初始化延时
		int each=5;  		//两次开始执行最小间隔时间
		
        scheduler.scheduleWithFixedDelay(
        	new EchoServer(), 
        	startTime, 
        	each,
        	TimeUnit.SECONDS);  
	}

	/** 
	 * 每天晚上8点执行一次 
	 * 每天定时安排任务进行执行 
	 */  
	public static void executeEightAtNightPerDay() {  
	    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 time "HH:mm:ss" 
	 * @return 
	 */  
	private static long getTimeMillis(String time) {  
	    try {  
	        DateFormat dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");  
	        DateFormat dayFormat = new SimpleDateFormat("yy-MM-dd");  
	        Date curDate = dateFormat.parse(dayFormat.format(new Date()) + " " + time);  
	        return curDate.getTime();  
	    } catch (ParseException e) {  
	        e.printStackTrace();  
	    }  
	    return 0;  
	}

}

class EchoServer implements Runnable {  
	@Override  
	public void run() {  
		try {  
			Thread.sleep(50);  
		} catch (InterruptedException e) {  
			e.printStackTrace();  
		}  
		System.out.println("This is a echo server. The current time is " +  System.currentTimeMillis() + ".");  
	}  
} 
分享到:
评论

相关推荐

    java实现定时任务java实现定时任务

    java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现...

    java定时任务的实现方式

    本文将详细介绍两种常用的Java定时任务实现方式:Timer类和Spring框架的Quartz调度器。 首先,第一种方式是使用Java内置的`Timer`类。`Timer`类提供了定时任务调度的功能,可以按照预设的时间间隔执行任务。在提供...

    java轻松实现—定时任务

    总结来说,Java实现定时任务有多种方法,其中在Web应用中使用监听器和`TimerTask`是一种常见的方式。这种方式易于理解和实现,但可能不适合复杂的定时需求。对于更复杂的需求,可以考虑使用`...

    java动态管理定时任务

    在Java开发中,定时任务是不可或缺的一部分,尤其在企业级应用中,用于执行定期的数据处理、报表生成、系统维护等工作。Spring框架与Quartz库的整合提供了强大的动态管理定时任务的能力。下面我们将深入探讨这个主题...

    java定时任务,每天定时执行任务

    Java 定时任务是指在 Java 语言中实现的定时执行任务的机制,通过使用 Timer 和 TimerTask 两个类,可以实现定时执行任务的功能。在这个例子中,我们将实现每天定时执行任务的功能,具体来说,就是在每天的凌晨 2 点...

    Java定时执行任务的三种方法

    本文将详细介绍Java中三种常见的定时任务实现方式:`java.util.Timer`、`ServletContextListener`以及Spring框架中的`ScheduledTimerTask`。 1. **java.util.Timer** `java.util.Timer`类是最基础的定时任务工具,...

    java quartz 定时任务

    在Java中,可以使用ScheduledExecutorService或者Quartz来实现定时任务。 3. **Cron表达式**: - Cron表达式是Unix cron服务的一种时间格式,用于定义任务的执行时间。它由7个子字段组成(秒、分钟、小时、日期、...

    Java多线程之定时任务 以及 SpringBoot多线程实现定时任务——异步任务

    1. SpringBoot 自定义线程池以及多线程间的异步调用(@Async、@EnableAsync) 2.Java多线程之定时任务 以及 SpringBoot多线程实现定时任务 3.@EnableScheduling 与 @Scheduled

    java定时任务调度

    在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring框架的`@Scheduled`注解以及Quartz库。 1. **Java内置的`java.util.Timer`和`TimerTask`**: - `Timer`类用于创建一...

    spring整合java quartz实现动态定时任务的前台网页配置与管理

    可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合实现动态的改变定时任务的状态的一个...

    java定时任务quartz的基本实现

    Java定时任务在软件开发中扮演着重要角色,它允许开发者安排任务在特定时间执行,而无需持续监控。Quartz是Java领域中一个广泛使用的开源任务调度框架,它提供了丰富的功能来满足各种定时任务的需求。本篇文章将深入...

    JAVA定时任务调度

    在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util.Timer`类、`java.util.concurrent.ScheduledExecutorService`,以及更强大的第三方库如Quartz Scheduler和Spring框架中的`@Scheduled`注解等...

    Java定时执行某个任务

    总结起来,Java提供了`Timer`和`ScheduledExecutorService`两种方式来实现定时执行任务。`Timer`适合简单的定时任务,而`ScheduledExecutorService`更适合复杂的需求,如多线程环境和高并发场景。选择哪种方式取决于...

    java 定时任务及jar包

    在Java中,我们可以使用内置的`java.util.Timer`类和`java.util.concurrent.ScheduledExecutorService`来实现定时任务。这两个工具提供了不同的调度策略,可以根据实际需求选择合适的。 1. `java.util.Timer` 和 `...

    java定时任务开源案例

    在Java世界里,实现定时任务的方式多种多样,包括但不限于使用Java内置的`java.util.Timer`和`java.util.concurrent.ScheduledExecutorService`,以及更流行的开源库如Quartz和Spring Scheduler。下面我们将深入探讨...

    java写定时任务,定时任务、定时器详细示例

    本文将深入探讨如何使用Java标准库中的`java.util.Timer`和`java.util.TimerTask`来实现定时任务。 ### 原理详解 在Java中,`java.util.Timer`类提供了调度定时任务的功能,而`java.util.TimerTask`则是执行这些...

    java定时任务小例子

    总结一下,这个例子展示了如何使用Java标准库中的`Timer`和`TimerTask`实现定时任务。对于初学者,这是一个很好的起点,可以了解到基础的定时任务实现方式。然而,随着技能的提升,应该学习并理解更多高级的定时任务...

    java定时任务

    在给定的文件中,我们有两个关键的类:SimpleTriggerRunner.java和Jobtest.java,它们很可能是实现定时任务的核心组件。下面我们将深入探讨Java定时任务的实现方式以及这两个文件可能涉及的概念。 1. **Java定时...

    java实现batch定时批处理

    用java springboot框架实现定时批处理,更新DB字段内容,更新成功后微信短信推送消息给用户

Global site tag (gtag.js) - Google Analytics