项目中用到了cheduledExecutorService中的一个方法,就顺便把其中几个关重要的方法学习下:
1.schedule
schedule(Runnable command, long delay, TimeUnit unit),schedule方法被用来延迟指定时间后执行某个指定任务。
a.代码如下:
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);
}
}
b.输出如下:
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)
创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟,如果任务的执行时间超过了廷迟时间(delay),下一个任务则会在
(当前任务执行所需时间+delay)后执行。
a.代码如下:
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);
}
}
b.输出如下:
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)
创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。
如果任务的执行时间小于period,将会按上述规律执行。否则,则会按 任务的实际执行时间进行周期执行。
a.代码如下:
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);
}
b.结果输出:
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
分享到:
相关推荐
ScheduledExecutorService是Java并发编程中一个非常重要的工具类,它属于ExecutorService接口的一个实现,主要用于执行定时或周期性的任务。这个服务提供了强大的定时任务管理能力,可以用来安排在未来某一时刻或者...
这个方法的参数包括初始延迟时间、执行周期和时间单位。在这个示例中,我们设置了初始延迟时间为 0 毫秒,每隔 5 毫秒重新执行一次任务。 fixDelay 方法 fixDelay 方法用于在具体的延迟时间后执行某个任务。在上面...
4. **ScheduledExecutorService**:这是Java并发库提供的一个强大的定时执行工具,它可以创建一个线程池来执行周期性任务。通过`scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit ...
总之,`Timer` 和 `TimerTask` 是 Java 中用于实现周期任务的基础工具,但它们有一定的局限性。在实际开发中,根据项目需求和性能要求,可以考虑使用更高级的并发工具,如 `ScheduledExecutorService`,以获得更好的...
此外,`ScheduledExecutorService`还提供了`scheduleAtFixedRate()`和`scheduleWithFixedDelay()`方法,用于周期性地执行任务。前者会在每次任务执行结束与下一次开始之间保持恒定的时间间隔,而后者则是在任务完成...
`ScheduledExecutorService`是Java并发库的一部分,可以用来调度周期性的任务执行。创建一个ScheduledExecutorService实例,然后使用`scheduleAtFixedRate`或`scheduleWithFixedDelay`方法设定任务的执行频率。 ...
`ScheduledExecutorService`提供了更强大的功能,如支持固定延迟执行、周期性执行以及精确到纳秒的调度。以下是一个使用`ScheduledExecutorService`的例子: ```java import java.util.concurrent.Executors; ...
`Timer`类是Java提供的一个计时器类,可以用来调度任务在未来某个时间点执行或者周期性地执行。`TimerTask`是实际的任务载体,它继承自`Runnable`。创建`Timer`对象后,通过`schedule(TimerTask task, long delay)`...
在这个例子中,我们在`init()`方法中创建了一个`ScheduledExecutorService`实例,并设置了一个定时任务,它将在服务器启动后每小时执行一次。在`destroy()`方法中,我们关闭了`executor`以释放资源。 总结,通过在`...
Java定时执行任务是Java开发中常见的一种需求,用于在特定时间点或按照预设周期执行某段代码。在Java中,有两种主要的方式来实现定时任务:Java.util.Timer类和java.util.concurrent包下的ScheduledExecutorService...
要实现每天定点执行任务,可以创建一个ScheduledExecutorService实例,然后使用`scheduleAtFixedRate`或`scheduleWithFixedDelay`方法来设置任务的周期性执行。下面是一个简单的例子: ```java import java.util....
- `java.util.concurrent.ScheduledExecutorService`: 这是Java并发包中的一个接口,提供了更强大的定时任务管理能力,支持定时和定期执行任务。它通过`ScheduledFuture`接口返回的实例可以取消任务或者获取任务...
这两个类属于`java.util`包,为开发者提供了执行周期性或一次性任务的能力。下面我们将深入探讨如何利用`TimerTask`执行每日定时任务。 首先,`TimerTask`是Java中的一个抽象类,它代表了一个可以被`Timer`对象调度...
在Java编程语言中,"自定义任务执行时间"是一个关键概念,它涉及到如何根据特定需求安排任务在未来的某个时刻或周期性地运行。这通常通过使用定时器(Timer)类和相关的API来实现。让我们深入了解一下Java中的定时...
周期性的定时任务是指按照固定的时间间隔执行的任务,而非周期性的定时任务是指在特定的时间点执行的任务。 二、Java定时任务的类型 Java提供了多种定时任务机制,包括: * Timer类:Timer类是Java平台提供的最...
例如,在Java中,我们可以使用`java.util.Timer`类或者`ScheduledExecutorService`接口来创建定时任务。这两种方法都可以设定一个延迟或周期,让代码在特定时间点或每隔一定时间执行。 在Python中,可以使用`...
`ScheduledExecutorService`是Java并发包`java.util.concurrent`中的一个接口,它提供了延迟执行和周期性执行任务的能力。 首先,我们需要在Spring配置类中配置一个`TaskScheduler`,这是Spring提供的一个接口,...
3. **ThreadPoolTaskScheduler**:这是Spring提供的定时任务调度器,它可以基于Java的`ScheduledExecutorService`来执行周期性的任务。 4. **@Scheduled**:这是一个注解,用于标记需要定时执行的方法。 在非Web...
- 对于短周期或频繁的任务,推荐使用`Handler`或`ScheduledExecutorService`,它们在应用运行时有效,但设备休眠时不会执行。 - 为了提高用户体验和避免不必要的唤醒,确保只在必要时启动定时任务,并在任务完成后...
- 与 `Timer` 不同,`ScheduledExecutorService` 在任务出现异常时不会停止整个服务,而是仅取消当前任务,使得其他任务可以继续执行。 - 当不再需要定时任务时,可以通过 `shutdown()` 或 `shutdownNow()` 方法...