`
bogongjie
  • 浏览: 235429 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

java ScheduledExecutorService执行周期任务

    博客分类:
  • java
阅读更多

1.schedule 
     schedule(Runnable command, long delay, TimeUnit unit),schedule方法被用来延迟指定时间后执行某个指定任务。

public class Job implements Runnable {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

    public void run() {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        System.out.println("do something  at:" + sdf.format(new Date()));
    }
}

public class ScheduledExecutorServiceTest {

    public static void main(String[] args) {
        ScheduledExecutorService schedule = Executors.newScheduledThreadPool(5);
        final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println(" begin to do something at:" + sdf.format(new Date()));
        schedule.schedule(new Job(),1, TimeUnit.SECONDS);
    }
}

 输出如下:

  begin to do something at:2012-08-03 09:31:36
  do something  at:2012-08-03 09:31:42

 

2.scheduleWithFixedDelay 

         scheduleWithFixedDelay(Runnable command, long initialDelay, long delay,TimeUnit unit)

        scheduleWithFixedDelay():安排所提交的Runnable任务在每次执行完后,等待delay所指定的时间后重复执行
         创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟,如果任务的执行时间超过了廷迟时间(delay),下一个任务则会在
(当前任务执行所需时间+delay)后执行。

public class ScheduledExecutorServiceTest {
        public static void main(String[] args) {
            ScheduledExecutorService schedule = Executors.newScheduledThreadPool(5);
            final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            System.out.println(" begin to do something at:" + sdf.format(new Date()));
            schedule.scheduleWithFixedDelay(new Job(), 1, 2, TimeUnit.SECONDS);
        }
    }

 输出如下:

    begin to do something at:2012-08-03 09:36:53
    do something at:2012-08-03 09:36:59
    do something at:2012-08-03 09:37:06
    do something at:2012-08-03 09:37:13

 

3.scheduleAtFixedRate 
         scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnitunit)

         scheduleAtFixedRate():安排所提交的Runnable任务按指定的间隔重复执行
         创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。
如果任务的执行时间小于period,将会按上述规律执行。否则,则会按 任务的实际执行时间进行周期执行。

public class ScheduledExecutorServiceTest {

    public static void main(String[] args) {
        ScheduledExecutorService schedule = Executors.newScheduledThreadPool(2);
        final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println(" begin to do something at:" + sdf.format(new Date()));
        schedule.scheduleAtFixedRate(new Job(), 1,2, TimeUnit.SECONDS);
    }

 结果输出:

    begin to do something at:2012-08-04 08:53:30
    do something at:2012-08-04 08:53:36
    do something at:2012-08-04 08:53:41
    do something at:2012-08-04 08:53:46
    do something at:2012-08-04 08:53:51

 

Demo:

int a = 0;
	int b = 0;
	ScheduledExecutorService mExecutorService;
	ScheduledFuture mFuture1, mFuture2;

	private void executScheduledExecutorService() {
		mExecutorService = Executors.newScheduledThreadPool(1);
		mFuture1 = mExecutorService.scheduleAtFixedRate(new EchoServer(), 1000, 1000, TimeUnit.MILLISECONDS);

		mExecutorService.schedule(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				Log.i("W", "shut down.");
				mExecutorService.shutdownNow();
			}
		}, 40, TimeUnit.SECONDS);

	}

	class EchoServer implements Runnable {
		@Override
		public void run() {
			// TODO Auto-generated method stub
			a++;
			Log.i("W", "a = " + a);
			if (a == 10) {
				mFuture1.cancel(false);
			}
			if (a == 2) {
				mFuture2 = mExecutorService.scheduleAtFixedRate(new EchorServer(), 1000, 2000, TimeUnit.MILLISECONDS);
			}
		}
	}

	class EchorServer implements Runnable {

		@Override
		public void run() {
			// TODO Auto-generated method stub
			b++;
			Log.i("W", "b = " + b);
			if (b == 15) {
				mFuture2.cancel(false);
			}
		}
	}

 

 

 

转载:http://kim-miao.iteye.com/blog/1618713

分享到:
评论

相关推荐

    Java定时执行某个任务

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

    ScheduledExecutorService 计时器任务处理

    ScheduledExecutorService是Java并发编程中一个非常重要的工具类,它属于ExecutorService接口的一个实现,主要用于执行定时或周期性的任务。这个服务提供了强大的定时任务管理能力,可以用来安排在未来某一时刻或者...

    java web使用监听器实现定时周期性执行任务demo

    `ScheduledExecutorService`是Java并发库的一部分,可以用来调度周期性的任务执行。创建一个ScheduledExecutorService实例,然后使用`scheduleAtFixedRate`或`scheduleWithFixedDelay`方法设定任务的执行频率。 ...

    java 定时执行任务

    Java定时执行任务是Java开发中常见的一种需求,用于在特定时间点或按照预设周期执行某段代码。在Java中,有两种主要的方式来实现定时任务:Java.util.Timer类和java.util.concurrent包下的ScheduledExecutorService...

    java实现一个小程序语句的延迟执行的小demo

    此外,`ScheduledExecutorService`还提供了`scheduleAtFixedRate()`和`scheduleWithFixedDelay()`方法,用于周期性地执行任务。前者会在每次任务执行结束与下一次开始之间保持恒定的时间间隔,而后者则是在任务完成...

    java定时执行多任务和quartz定时执行多任务

    - `java.util.concurrent.ScheduledExecutorService`: 这是Java并发包中的一个接口,提供了更强大的定时任务管理能力,支持定时和定期执行任务。它通过`ScheduledFuture`接口返回的实例可以取消任务或者获取任务...

    ScheduledExecutorService任务定时代码示例

    ScheduledExecutorService 是 Java 中的并发编程 API,用于执行延迟或周期性的任务。下面是对 ScheduledExecutorService 的任务定时代码示例的详细解释。 ScheduledExecutorService 的作用 ...

    java每天实现定点执行任务java每天实现定点执行任务

    要实现每天定点执行任务,可以创建一个ScheduledExecutorService实例,然后使用`scheduleAtFixedRate`或`scheduleWithFixedDelay`方法来设置任务的周期性执行。下面是一个简单的例子: ```java import java.util....

    JAVA定时任务调度

    Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...

    JAVA项目服务器启动时自启动指定的Servlet,并定时执行任务

    在Java Web开发中,我们经常需要在服务器启动时自动加载特定的Servlet,并让它们执行一些初始化操作或定时任务。这通常涉及到对Web应用的配置文件`web.xml`以及Servlet类本身的编程。以下将详细讲解如何实现这个功能...

    使用Timer和TimerTask实现周期任务

    总之,`Timer` 和 `TimerTask` 是 Java 中用于实现周期任务的基础工具,但它们有一定的局限性。在实际开发中,根据项目需求和性能要求,可以考虑使用更高级的并发工具,如 `ScheduledExecutorService`,以获得更好的...

    java quartz 定时任务

    - 定时任务是在特定时间点自动执行的程序或任务,常用于执行周期性维护、数据同步、定时报告等。在Java中,可以使用ScheduledExecutorService或者Quartz来实现定时任务。 3. **Cron表达式**: - Cron表达式是Unix...

    Java定时任务及其在工作流系统中的应用.pdf

    在监控系统状态方面,Java定时任务可以用于监控系统状态,以确保系统的稳定运行。 五、结论 Java定时任务是Java平台提供的一种强大的机制,以满足工作流系统中的需求。通过使用Java定时任务,可以提高工作效率、...

    java 定时任务及jar包

    Java定时任务是Java编程中一个重要的特性,它允许开发者安排任务在特定的时间点或周期性地执行。在Java中,我们可以使用内置的`java.util.Timer`类和`java.util.concurrent.ScheduledExecutorService`来实现定时任务...

    6.2 创建定时和周期任务

    在Android开发中,创建定时和周期任务是常见的需求,尤其对于需要后台运行或者定期更新的程序来说至关重要。标题“6.2 创建定时和周期任务”指的是如何在Android系统中实现这样的功能,使得应用程序能够按照预定的...

    java定时任务开源案例

    - `java.util.Timer`: 这是Java标准库中提供的一种简单的定时任务调度器,它可以安排一次性或周期性的任务。然而,`Timer`并不适合并发环境,因为它只有一个线程处理所有任务,可能导致任务间的相互阻塞。 - `java...

    Springmvc java注解设置定时任务实例

    `ScheduledExecutorService`是Java并发包`java.util.concurrent`中的一个接口,它提供了延迟执行和周期性执行任务的能力。 首先,我们需要在Spring配置类中配置一个`TaskScheduler`,这是Spring提供的一个接口,...

    java 定时任务管理框架

    Java定时任务管理框架是开发中常见的一种工具,用于在特定时间执行特定任务,极大地提高了工作效率。Citic Scheduler作为这样一个框架,旨在简化Java项目中的定时任务管理。它提供了一个直观的用户界面,允许开发者...

    java定时器(定时任务)

    Java定时器,也被称为Java定时任务,是Java编程语言中用于执行预定任务的重要工具。它允许程序员设置在未来某个时间点或按照一定周期执行特定代码,从而实现自动化操作。在Java中,有两个主要类用于实现定时任务:`...

    java定时执行代码.

    Java定时执行代码是Java开发中常见的一种需求,用于在特定时间点或按照预设周期执行某段任务。Java提供了多种实现定时任务的机制,这里主要介绍两种:Java.util.Timer类和java.util.concurrent....

Global site tag (gtag.js) - Google Analytics