美文网首页
Timer和TimerTask

Timer和TimerTask

作者: yxCassiel | 来源:发表于2019-02-12 16:22 被阅读0次

    关于Timer定时器的实现原理,如果我们看过JDK源码,就会发现,是使用的Object.wait(timeout),来进行的线程阻塞,timeout是根据下次执行实际和当前实际之差来计算。实际上,这可以归结为一个多线程协作(协作都是在互斥下的协作)问题。

    在java.util.concurrent中,有个ScheduledThreadPoolExecutor,也可以完全实现定时任务的功能。

    而其他的框架,无非是功能的增强,特性更多,更好用,都是在基础的java之上的包装。

    代码示例如下:

    import java.util.Date;  
    import java.util.Timer;  
    import java.util.TimerTask;   
    public class TimerTest extends TimerTask  
    {  
       private Timer timer;       
       public static void main(String[] args)  
       {  
           TimerTest timerTest= new TimerTest();  
           timerTest.timer = new Timer();            
           //立刻开始执行timerTest任务,只执行一次  
           timerTest.timer.schedule(timerTest,new Date());            
           //立刻开始执行timerTest任务,执行完本次任务后,隔2秒再执行一次  
           //timerTest.timer.schedule(timerTest,new Date(),2000);            
           //一秒钟后开始执行timerTest任务,只执行一次  
           //timerTest.timer.schedule(timerTest,1000);            
           //一秒钟后开始执行timerTest任务,执行完本次任务后,隔2秒再执行一次  
           //timerTest.timer.schedule(timerTest,1000,2000);            
           //立刻开始执行timerTest任务,每隔2秒执行一次  
           //timerTest.timer.scheduleAtFixedRate(timerTest,new Date(),2000);           
           //一秒钟后开始执行timerTest任务,每隔2秒执行一次  
           //timerTest.timer.scheduleAtFixedRate(timerTest,1000,2000);  
    
           try  
           {  
               Thread.sleep(10000);  
           } catch (InterruptedException e)  
           {  
               e.printStackTrace();  
           }
           //结束任务执行,程序终止  
           timerTest.timer.cancel();  
           //结束任务执行,程序并不终止,因为线程是JVM级别的  
           //timerTest.cancel();  
       }    
       @Override  
       public void run()  
       {  
           System.out.println("Task is running!");  
       }  
    } 
    

    相关文章

      网友评论

          本文标题:Timer和TimerTask

          本文链接:https://www.haomeiwen.com/subject/xfykeqtx.html