黑马程序员_JAVA定时器
来源:互联网 发布:docker 跨主机网络 编辑:程序博客网 时间:2024/06/08 16:29
------- android培训、java培训、期待与您交流! ----------
------- android培训、java培训、期待与您交流! ----------
1、Timer
包:java.util.Timer
构造方法:
Timer() //创建一个新计时器 Timer(boolean isDaemon) //创建一个新计时器,可以指定其相关的线程作为守护程序运行Timer(String name) //创建一个新计时器,其相关的线程具有指定的名称Timer(String name, boolean isDaemon) //创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行
方法摘要:
schedule(TimerTask task, Date time) //安排在指定的时间执行指定的任务 ,TimerTaske implements Runnableschedule(TimerTask task, Date firstTime, long period)//安排指定的任务在指定的时间开始进行重复的固定延迟执行schedule(TimerTask task, long delay, long period) // 安排指定的任务从指定的延迟后开始进行重复的固定延迟执行scheduleAtFixedRate(TimerTask task, Date firstTime, long period)//安排指定的任务在指定的时间开始进行重复的固定速率执行scheduleAtFixedRate(TimerTask task, long delay, long period)//安排指定的任务在指定的延迟后开始进行重复的固定速率执行
2、ScheduledThreadPoolExecutor 引入
继承关系:
java.lang.Objectjava.util.concurrent.AbstractExecutorService java.util.concurrent.ThreadPoolExecutor java.util.concurrent.ScheduledThreadPoolExecutor
public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService
方法摘要:
ScheduledFuture schedule(Callable<V> callable, long delay, TimeUnit unit) //在指定的延迟后执行
ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)//在指定的延迟后执行
ScheduledFuture scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)//在指定的延迟后以固定速率执行(类似Timer.scheduleAtFixedRate())
ScheduledFuture scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)//在指定的延迟后以固定间隔执行(类似Timer.schedule())
3、ScheduledThreadPoolExecutor 与Timer比较:
(1)Timer对调度的支持是基于绝对时间的,因此任务对系统时间的改变是敏感的;而ScheduledThreadPoolExecutor支持相对时间。
(2)Timer使用单线程方式来执行所有的TimerTask,如果某个TimerTask很耗时则会影响到其他TimerTask的执行;而ScheduledThreadPoolExecutor则可以构造一个固定大小的线程池来执行任务。
(3)Timer 不会捕获由TimerTask抛出的未检查异常,故当有异常抛出时,Timer会终止,导致未执行完的TimerTask不再执行,新的 TimerTask也不能被调度;ScheduledThreadPoolExecutor对这个问题进行了妥善的处理,不会影响其他任务的执行。
4、实例
public class ScheduledThreadPoolExec{public static void main( String[] args) throws InterruptedException, ExecutionException{//线程池只有一个线程,所有的任务都由这个线程来执行和调度final ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);System.out.println("任务执行之前 : "+new Date());final ScheduledFuture future1 = executor.schedule(new Runnable() {public void run() {System.out.println(" 任务执行之后,future1 : "+Thread.currentThread().getName()+" : "+new Date());}}, 5, TimeUnit.SECONDS);final ScheduledFuture future2 = executor.schedule(new Runnable() {public void run() {System.out.println("任务执行之后,future2 : "+Thread.currentThread().getName()+" : "+new Date());}}, 3, TimeUnit.SECONDS); // 执行抛出异常的任务executor.schedule(new ExceptionTask(), 1, TimeUnit.SECONDS);executor.schedule(new ExceptionTask(), 2, TimeUnit.SECONDS); final BlockingQueue blockingQueue = new ArrayBlockingQueue(2, true); blockingQueue.add(future2); blockingQueue.add(future1); System.out.println(new Date()); //等待任务的执行完毕 while (!blockingQueue.isEmpty()){ final ScheduledFuture future = (ScheduledFuture) blockingQueue.poll(); if (!future.isDone()){ blockingQueue.add(future); }else{ System.out.println(future.get()); } } System.out.println(new Date()); executor.shutdown(); }}class ExceptionTask extends TimerTask{ public void run(){ System.out.println("TimerExceptionTask: "+Thread.currentThread().getName() +" : "+ new Date()); throw new RuntimeException(); }}
实例测试证实,线程池里面的线程在执行任务的过程中如果发生异常,并不会终止后面其他任务的执行。
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员_JAVA定时器
- 黑马程序员_Java基础知识
- 黑马程序员_JAVA学习心得
- 黑马程序员_java多线程
- 黑马程序员_Java Applet
- 黑马程序员_Java高新技术
- 黑马程序员_Java必修课
- 黑马程序员_java初步
- 黑马程序员_Java枚举
- 黑马程序员_Java泛型
- 黑马程序员_JAVA多线程
- 黑马程序员_java反射
- 黑马程序员_Java注解
- 黑马程序员_java代理
- 黑马程序员_java集合
- 黑马程序员_java多线程
- 黑马程序员_java基础知识
- 黑马程序员_java高新技术
- monogame Unable to load DLL 'openal32.dll': The specified module could not be found
- 笔试总结
- 极大极小过程题集
- 什么是SOA
- execvp调用失败,错误信息"Bad address"的原因
- 黑马程序员_JAVA定时器
- PHP 自动生成帮助文档工具1.0Beta版【代码维护神器】
- 【Q&A】去除stl vector中特定位置的多个元素续_remove算法初探
- poj3981字符串替换 水的以至于浪费时间的水题
- 第11章 GUI 12 Adapter and repaint.flv
- c语言学习笔记八
- 递归解决全排列生成算法
- Oracle11g简单建表(约束)、查询、修改脚本
- 传智播客网页平面设计学院一期学员宋宁杰感谢信 !