博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用ScheduledThreadPoolExecutor定时执行任务
阅读量:6307 次
发布时间:2019-06-22

本文共 1448 字,大约阅读时间需要 4 分钟。

hot3.png

ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类;

JDK api里是这么说的:

 

,它可另行安排在给定的延迟后运行命令,或者定期执行命令。需要多个辅助线程时,或者要求  具有额外的灵活性或功能时,此类要优于 。

一旦启用已延迟的任务就执行它,但是有关何时启用,启用后何时执行则没有任何实时保证。按照提交的先进先出 (FIFO) 顺序来启用那些被安排在同一执行时间的任务。

---------------

平时我们在执行一个定时任务时,会采用Time,和TimeTask来组合处理;

但是Timer和TimerTask存在一些缺陷:

1:Timer只创建了一个线程。当你的任务执行的时间超过设置的延时时间将会产生一些问题。

2:Timer创建的线程没有处理异常,因此一旦抛出非受检异常,该线程会立即终止。

JDK 5.0以后推荐使用ScheduledThreadPoolExecutor。该类属于Executor Framework,它除了能处理异常外,还可以创建多个线程解决上面的问题。

以下为代码:

 

[java]  

  1. public class TaskTest {  
  2.    static ScheduledThreadPoolExecutor stpe = null;  
  3.    static int index;  
  4.     /** 
  5.      *  args the command line arguments 
  6.      */  
  7.     public static void main(String[] args) {  
  8.         // TODO code application logic here  
  9.         //构造一个ScheduledThreadPoolExecutor对象,并且设置它的容量为5个  
  10.         stpe = new ScheduledThreadPoolExecutor(5);  
  11.         MyTask task = new MyTask();  
  12. //隔2秒后开始执行任务,并且在上一次任务开始后隔一秒再执行一次;  
  13. //        stpe.scheduleWithFixedDelay(task, 2, 1, TimeUnit.SECONDS);  
  14.         //隔6秒后执行一次,但只会执行一次。  
  15.         stpe.schedule(task, 6, TimeUnit.SECONDS);  
  16.     }  
  17.   
  18.     private static String getTimes() {  
  19.         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");  
  20.         Date date = new Date();  
  21.         date.setTime(System.currentTimeMillis());  
  22.         return format.format(date);  
  23.     }  
  24.   
  25.     private static class MyTask implements Runnable {  
  26.   
  27.           
  28.         public void run() {  
  29.             index++;  
  30.             System.out.println("2= " + getTimes()+" "  +index);  
  31.             if(index >=10){  
  32.                 stpe.shutdown();  
  33.                 if(stpe.isShutdown()){  
  34.                     System.out.println("停止了????");  
  35.                 }  
  36.             }  
  37.         }  
  38.     }  
  39. }  

转载于:https://my.oschina.net/u/3318187/blog/967826

你可能感兴趣的文章
浅谈代理
查看>>
php创建桌面快捷方式实现方法
查看>>
基于jquery实现的超酷动画源码
查看>>
fl包下的TransitionManager的使用
查看>>
Factorialize a Number
查看>>
[USB-Blaster] Error (209040): Can't access JTAG chain
查看>>
TreeSet的用法
查看>>
防HTTP慢速攻击的nginx安全配置
查看>>
深入理解PHP内核(十四)类的成员变量及方法
查看>>
Spring Boot2.0+中,自定义配置类扩展springMVC的功能
查看>>
参与博客编辑器改版,我的礼物 感谢51cto
查看>>
JavaWeb笔记——JSTL标签
查看>>
Eclipse插件大全 挑选最牛的TOP30
查看>>
一些实用性的总结与纠正
查看>>
Kubernetes概念
查看>>
逻辑卷管理器(LVM)
查看>>
一个小代码,欢迎大佬的意见,求指正
查看>>
搭建LAMP架构
查看>>
神经网络注意力机制--Attention in Neural Networks
查看>>
Spring.Net+WCF实现分布式事务
查看>>