简单总结就是:如果定时任务执行过程中遇到发生异常,则后面的任务将不再执行。
我们可以做个实验验证一下:
先看下面一段代码:
/**
* [Copyright]
* @author QiFuguang
* Aug 25, 2014 9:48:41 PM
*/
package com.winwill.xx;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
publicclassTest{
privatefinalstaticScheduledExecutorService scheduler =Executors.newSingleThreadScheduledExecutor();
publicstaticvoid main(String[] args){
scheduler.scheduleAtFixedRate(newRunnable(){
@Override
publicvoid run(){
int[] s =newint[1];
System.out.println("OK");
System.out.println(s[1]);// 数组越界
}
},0,2,TimeUnit.SECONDS);
}
}
可以看到定时任务只执行了一次,因为第一次执行就遇到了数组越界异常,后面的任务被取消了。
再看如下代码:
/**
* [Copyright]
* @author QiFuguang
* Aug 25, 2014 9:48:41 PM
*/
package com.winwill.xx;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
publicclassTest{
privatefinalstaticScheduledExecutorService scheduler =Executors.newSingleThreadScheduledExecutor();
publicstaticvoid main(String[] args){
scheduler.scheduleAtFixedRate(newRunnable(){
@Override
publicvoid run(){
try{
int[] s =newint[1];
System.out.println("OK");
System.out.println(s[1]);// 数组越界
}catch(Throwable t){
System.out.println("Error");
}
}
},0,2,TimeUnit.SECONDS);
}
}
加了try/catch之后可以看到定时任务没有被取消。
相关推荐
定时器小例子,这是一个经较好定时器应用
您可以在工作线程上运行任务(Runnable或Callable),以指定执行计划(如ScheduledExecutorService),并指定执行时间。 介面 ScheduledFuture<?> schedule( Runnable command, int executeTime, long delay,...
这是一个jar,很秀。自定义的一个Java定时器工具类。主要是结合Spring Boot一起使用,并在Spring Boot启动的时候一起启动运行。
ScheduledExecutorService 计时器任务处理,用于超时处理。
主要介绍了ScheduledExecutorService任务定时代码示例,具有一定借鉴价值,需要的朋友可以参考下
下面小编就为大家带来一篇基于ScheduledExecutorService的两种方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Java通用任务执行程序,基于java.util.concurrent.ScheduledExecutorService。 Java通用的任务执行器,基于java.util.concurrent.ScheduledExecutorService工具类实现。 Maven: <groupId>...
当执行executor(Runnable command)方法后, 传入一个任务, public void execute(Runnable command) { if (command == null) throw new NullPointerException(); if (poolSize >= corePoolSize || !...
Springmvc java注解设置定时任务实例,利用 ScheduledExecutorService 接口实现
│ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │ 高并发编程第一阶段07讲、策略模式在Thread和Runnable中的应用分析.mp4 │ 高并发编程第一阶段08讲、构造Thread对象你...
│ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │ 高并发编程第一阶段07讲、策略模式在Thread和Runnable中的应用分析.mp4 │ 高并发编程第一阶段08讲、构造Thread对象你...
线程池执行者 ThreadPoolExecutor,定时执行者服务 ScheduledExecutorService, 使用 ForkJoinPool 进行分叉和合并,锁 Lock,读写锁 ReadWriteLock 原子性长整型 AtomicLong,原子性引用型 AtomicReference 修改数据:...
springMVC配置、注解、列子
串行执行器服务 ScheduledExecutorService 的测试实用程序实现 允许测试如下代码: class Foo { private int count = 0; public Foo(ScheduledExecutorService service, Bar bar) { service....
18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 ...
18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 ...
定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong...
在Java 5.0之前启动一个任务是通过调用Thread类的start()方法来实现的,任务的提于交和执行是同时进行的,如果你想对任务的执行进行调度或是控制 同时执行的线程数量就需要额外编写代码来完成。5.0里提供了一个新的...
18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 ...
7)一个程序执行1秒之后自动退出 13 8)线程的状态 14 9)线程阻塞的条件(重要) 14 10) Interrupt()注意事项 16 三. 线程之间协作 17 1)演示简单的消费者和生产者的例子: 17 2)管道的读写流处理方式 19 3)重要的演示...