JAVA 定时任务实现的方法

今天工作的过程中,利用线程的框架编写一个后台定时任务,执行一些操作,突然我就在想java中实现定时任务的方式有哪些呢,于是在下班后自己搜了一些资料,试着写了一个定时任务,特此在这些个笔记,让自己加深一下印象,证明自己也曾经学过java定时器的实现。

java实现定时有三种方法:

  1. 利用单线程,通过线程的睡眠,来达到定时效果。
  2. 通过java提供的Timer and  TimerTask类来实现。Timer和TimerTask是rt.jar包下java.util.TimerTask;和java.util.Timer两个类。
  3. 通过ScheduledExecutorService工具类实现,这是最好的实现方式。

下面我们就来详细的介绍上面这三种实现定时任务的方式:

利用单线程来实现,那么我们就要创建一个线程,在线程通过Sleep()函数来实现定时的效果,这种实现方式比较死板。但是不能达到很好的定时效果。

	Runnable task = new Runnable() {
		
		@Override
		public void run() {
while(true){
        Sleep(60);
    //TODO 你想做的事情
}
}

}

利用Timer和TimerTask实现,相比较单线程实现定时任务,这种实现方式有以下的有点:

  1. 可以控制启动和取消任务
  2. 第一次执行任务时候可以指定你想要的delay时间
  3.  Timer可以调度任务,TimerTask可以通过run实现具体的任务,Timer可以调度多任务,他是线程安全的,当Timer被创建的时候他创建一个线程,这个线程可以用来调度任务。
  4. timer.scheduleAtFixedRate(TimerTask,delay,period);   delay 程序启动间隔时间,period是下次运行间隔时间。timer.scheduleAtFixedRate(TimerTask,date,period);  date启动时间 
  5. schedule在计算下一次执行的时间的时候,随后的执行时间按照 上一次 **实际执行完成的时间点** 进行计算
  6. scheduleAtFixedRate方法:随后的执行时间按照 上一次开始的 时间点 进行计算

 

public class Task2 {  
4.  public static void main(String[] args) {  
5.    TimerTask task = new TimerTask() {  
6.      @Override  
7.      public void run() {  
8.        System.out.println("Hello !!!");  
9.      }  
10.    };  
11.    Timer timer = new Timer();  
12.    long delay = 0;  
13.    long intevalPeriod = 1 * 1000;  
14.    timer.scheduleAtFixedRate(task, delay,intevalPeriod);  
15.  }   
16.}  

ScheduledExecutorService  是java作为并发工具类引用的,这是理想的定时任务实现方式相比较前两个方法,他的好处:相比较Timer的单线程,那么ScheduledExcecutorServce是通过线程池的方式来执行任务的。可以灵活的去设定第一次执行任务的delay时间,提供了良好的约定,以便设定执行的时间间隔

public class Task3 {  
5.  public static void main(String[] args) {  
6.    Runnable runnable = new Runnable() {  
7.      public void run() {  
8.        System.out.println("Hello !!");  
9.      }  
10.    };  
11.    ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();  
12.    service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);  
13.  }  
14.}  

以上就是三种定时器的实现方式,当然,这只是定时器的启动方式,如果你想在通过定时器实现更多的功能,那就要和其他的模块进行组装和搭建

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值