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); } } }
相关推荐
总结起来,Java提供了`Timer`和`ScheduledExecutorService`两种方式来实现定时执行任务。`Timer`适合简单的定时任务,而`ScheduledExecutorService`更适合复杂的需求,如多线程环境和高并发场景。选择哪种方式取决于...
ScheduledExecutorService是Java并发编程中一个非常重要的工具类,它属于ExecutorService接口的一个实现,主要用于执行定时或周期性的任务。这个服务提供了强大的定时任务管理能力,可以用来安排在未来某一时刻或者...
`ScheduledExecutorService`是Java并发库的一部分,可以用来调度周期性的任务执行。创建一个ScheduledExecutorService实例,然后使用`scheduleAtFixedRate`或`scheduleWithFixedDelay`方法设定任务的执行频率。 ...
Java定时执行任务是Java开发中常见的一种需求,用于在特定时间点或按照预设周期执行某段代码。在Java中,有两种主要的方式来实现定时任务:Java.util.Timer类和java.util.concurrent包下的ScheduledExecutorService...
此外,`ScheduledExecutorService`还提供了`scheduleAtFixedRate()`和`scheduleWithFixedDelay()`方法,用于周期性地执行任务。前者会在每次任务执行结束与下一次开始之间保持恒定的时间间隔,而后者则是在任务完成...
- `java.util.concurrent.ScheduledExecutorService`: 这是Java并发包中的一个接口,提供了更强大的定时任务管理能力,支持定时和定期执行任务。它通过`ScheduledFuture`接口返回的实例可以取消任务或者获取任务...
ScheduledExecutorService 是 Java 中的并发编程 API,用于执行延迟或周期性的任务。下面是对 ScheduledExecutorService 的任务定时代码示例的详细解释。 ScheduledExecutorService 的作用 ...
要实现每天定点执行任务,可以创建一个ScheduledExecutorService实例,然后使用`scheduleAtFixedRate`或`scheduleWithFixedDelay`方法来设置任务的周期性执行。下面是一个简单的例子: ```java import java.util....
Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...
在Java Web开发中,我们经常需要在服务器启动时自动加载特定的Servlet,并让它们执行一些初始化操作或定时任务。这通常涉及到对Web应用的配置文件`web.xml`以及Servlet类本身的编程。以下将详细讲解如何实现这个功能...
总之,`Timer` 和 `TimerTask` 是 Java 中用于实现周期任务的基础工具,但它们有一定的局限性。在实际开发中,根据项目需求和性能要求,可以考虑使用更高级的并发工具,如 `ScheduledExecutorService`,以获得更好的...
- 定时任务是在特定时间点自动执行的程序或任务,常用于执行周期性维护、数据同步、定时报告等。在Java中,可以使用ScheduledExecutorService或者Quartz来实现定时任务。 3. **Cron表达式**: - Cron表达式是Unix...
在监控系统状态方面,Java定时任务可以用于监控系统状态,以确保系统的稳定运行。 五、结论 Java定时任务是Java平台提供的一种强大的机制,以满足工作流系统中的需求。通过使用Java定时任务,可以提高工作效率、...
Java定时任务是Java编程中一个重要的特性,它允许开发者安排任务在特定的时间点或周期性地执行。在Java中,我们可以使用内置的`java.util.Timer`类和`java.util.concurrent.ScheduledExecutorService`来实现定时任务...
在Android开发中,创建定时和周期任务是常见的需求,尤其对于需要后台运行或者定期更新的程序来说至关重要。标题“6.2 创建定时和周期任务”指的是如何在Android系统中实现这样的功能,使得应用程序能够按照预定的...
- `java.util.Timer`: 这是Java标准库中提供的一种简单的定时任务调度器,它可以安排一次性或周期性的任务。然而,`Timer`并不适合并发环境,因为它只有一个线程处理所有任务,可能导致任务间的相互阻塞。 - `java...
`ScheduledExecutorService`是Java并发包`java.util.concurrent`中的一个接口,它提供了延迟执行和周期性执行任务的能力。 首先,我们需要在Spring配置类中配置一个`TaskScheduler`,这是Spring提供的一个接口,...
Java定时任务管理框架是开发中常见的一种工具,用于在特定时间执行特定任务,极大地提高了工作效率。Citic Scheduler作为这样一个框架,旨在简化Java项目中的定时任务管理。它提供了一个直观的用户界面,允许开发者...
Java定时器,也被称为Java定时任务,是Java编程语言中用于执行预定任务的重要工具。它允许程序员设置在未来某个时间点或按照一定周期执行特定代码,从而实现自动化操作。在Java中,有两个主要类用于实现定时任务:`...
Java定时执行代码是Java开发中常见的一种需求,用于在特定时间点或按照预设周期执行某段任务。Java提供了多种实现定时任务的机制,这里主要介绍两种:Java.util.Timer类和java.util.concurrent....