ScheduledExecutorService是一个任务计划线程池接口,线程池中的线程并不是一开始就处于运行状态,而是在需要的时间点上由线程管理者触发,同样允许指定多次触发时间间隔。
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class SeheduledExecutorT1 {
private static final TimeUnit SECONDS = TimeUnit.SECONDS;
public static void main(String[] args){
//创建容量为2的线程池
final ScheduledExecutorService scheduler=Executors.newScheduledThreadPool(2);
//final Runnable beeper =new Runnable(){
final Thread beeper =new Thread(){
int count=0;
public void run() {
System.out.println(new Date() +" "+(count++));
// TODO Auto-generated method stub
}
};
//两秒后运行,每隔两秒运行一次
final ScheduledFuture<?> beeperHandle1=scheduler.scheduleAtFixedRate(beeper, 2,2,SECONDS);
//两秒后运行,上次运行完成后5秒后重新运行
final ScheduledFuture<?> beeperHandle2=scheduler.scheduleWithFixedDelay(beeper, 2,5,SECONDS);
//30秒后关闭任务,关闭线程池
scheduler.schedule(new Runnable(){
public void run() {
// TODO Auto-generated method stub
beeperHandle1.cancel(true);
beeperHandle2.cancel(true);
scheduler.shutdown();
}
},30,SECONDS);
}
}
scheduleAtFixedRate 和scheduleWithFixedDelay用于向线程池中添加任务计划,schedule用于在30秒后摧毁线程池。
分享到:
相关推荐
- ScheduledExecutorService 提供了定时和周期性任务的执行能力。 了解并熟练掌握这些知识点,有助于编写高效、稳定的并发程序,合理利用系统资源,避免因线程过多导致的资源浪费和性能问题。在实现自己的线程池时...
Java的ScheduledExecutorService提供了定时任务的支持,可以通过它的scheduleAtFixedRate()或scheduleWithFixedDelay()方法来安排周期性的任务。 在`hy.common.tpool`这个库中,可能包含了一套自定义的线程池实现,...
- 这种线程池非常适合用于执行周期性的后台任务或需要定时触发的任务。 - **示例代码**: ```java ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5); scheduledThreadPool...
- `ScheduledExecutorService`:除了基本的执行任务功能外,还支持定时和定期执行任务。 - `ThreadFactory`:用于创建线程的工厂接口,可以自定义线程属性。 - `Future`:代表异步计算的结果,提供了检查任务是否...
在上面的示例代码中,我们首先创建了一个固定线程数量的线程池,然后提交了100个任务到线程池中,最后关闭了线程池。 scheduledExecutorService接口 scheduledExecutorService接口是Java语言中的一种高级多线程...
4. ScheduledExecutorService:继承自ExecutorService,用于处理需要定时或周期性执行的任务。 5. Executors:包含了一系列静态工厂方法,用于生成不同类型的线程池实例。 常见的线程池实现包括: 1. ...
ScheduledExecutorService则是一种可以定时或延迟执行任务的线程池,特别适合于需要周期性执行任务的场景,例如定时刷新数据、定期发送心跳等。其方法`scheduleAtFixedRate`和`scheduleWithFixedDelay`可以实现定时...
- **定义**:通过`Executors`工具类创建的定时任务线程池。 - **特点**: - 可以用来执行周期性的任务; - 支持两种定时方式:基于延迟的调度和基于固定速率的调度。 - **示例代码**: - 基于延迟的调度: ```...
在Spring框架中,定时任务和线程池是两个非常重要的组件,它们可以帮助我们实现高效的后台任务处理。这篇博文“Spring基于线程池的定时任务线程异常实践”深入探讨了如何在Spring中结合线程池来执行定时任务,并且...
2. 异常处理:如果任务抛出异常,ScheduledExecutorService默认不会捕获,可能会影响线程池的正常运行。因此,最好将任务包装在try-catch块中,或者自定义RejectedExecutionHandler来处理异常。 3. 任务取消:可以...
通过使用线程池,我们可以让额外的线程在队列中等待,当一个任务完成时,这些等待中的线程就可以获取到新的任务并执行。这种方式可以有效地提高线程利用率,减少线程创建和销毁的开销,并优化系统性能。 使用线程池...
在Java中,我们可以使用内置的`java.util.Timer`类和`java.util.concurrent.ScheduledExecutorService`来实现定时任务。这两个工具提供了不同的调度策略,可以根据实际需求选择合适的。 1. `java.util.Timer` 和 `...
5. `newScheduledThreadPool(int corePoolSize)`:创建一个具有指定核心线程数的定时任务线程池,可以设定延迟或周期性执行任务,`corePoolSize`表示线程池中保持的线程数,即使它们是空闲的。 `ExecutorService`...
ScheduledExecutorService允许我们调度任务,如定时执行或周期性执行。这对于需要定期更新或者延时执行的任务非常有用。 七、线程同步与通信 在多线程环境中,线程同步和通信是必须面对的问题。Java提供了多种机制...
8. **`scheduleAtFixedRate()`和`scheduleWithFixedDelay()`**:两者都是`ScheduledExecutorService`的方法,用于周期性执行任务。`scheduleAtFixedRate()`按照固定的速率执行任务,即使上一次任务执行超时,下一次...
- `ScheduledExecutorService`:支持定时和周期性任务的ExecutorService。 - `Future`:表示异步计算的结果,可以检查任务是否完成,获取结果或取消任务。 - `CountDownLatch`:用于同步多个线程,让主线程等待...
当任务到来时,线程池会根据预先设定的策略选择是否创建新的线程或重用已有的空闲线程来处理这些任务。 #### 二、线程的状态与生命周期 Java中的线程有以下几种基本状态: 1. **新建状态 (New)**:当使用`new ...
在Java中,有两个主要类用于实现定时任务:`java.util.Timer` 和 `java.util.concurrent.ScheduledExecutorService`。 1. **`java.util.Timer` 类** - `Timer` 类是Java标准库中的一个老版本定时器,主要提供一次...
默认情况下,Spring Task使用的是单线程的ScheduledExecutorService,这意味着所有任务会串行执行。 - 任务执行的线程池可以通过`ThreadPoolTaskScheduler`自定义,改变线程池大小可以实现并发执行任务,从而避免一...
Java实现终止线程池中正在运行的定时任务 ...通过使用Java中的线程池和ScheduledExecutorService,我们可以轻松地实现终止线程池中正在运行的定时任务。同时,我们也可以使用cancel方法来中断一个正在运行的线程。