`
houkai2009
  • 浏览: 219130 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
  • 浪迹随风: 文章是挺好的,不过太杂了。。。信息量也很大。。。很难消化。。。 ...
    EJB 介绍
  • javaersu: yds3300376yd 写道学习了,只是楼主写的有点杂,现在 ...
    EJB 介绍
  • yds3300376yd: 学习了,只是楼主写的有点杂,现在还看不太懂,刚学习EJB,我觉 ...
    EJB 介绍
  • javaersu: 不错,这里也有一篇类似的EJB文章教程http://www.y ...
    EJB 介绍
  • dingding5060: brother , 你贴代码想说明什么???
    enum

java.util.Timer

    博客分类:
  • java
阅读更多

1。Timer是用来干什么用的?
2。如何来使用one-time execution, 和repeated execution?
3。Timer总共启用了几个线程?
4。Timer执行精确吗?
5。Timer的原理简单介绍。
6。schedule()和scheduleAtFixRate() 有什么区别?

1。Timer是用来干什么用的?
       javadoc上是这么说的:A facility for threads to schedule tasks for future execution in a background thread.  Tasks may be scheduled for one-time execution, or for repeated execution at regular intervals.

2。如何来使用one-time execution, 和repeated execution?
      一次执行:
           Timer timer = new Timer();
           最简单的是timer.schedule(timertask, long), 或者timer.schedule(timertask, date)。如果调用timer,schedule(timertask,long,0)也是一次执行。
     
      多次执行:
           timer.schedule(timertask, long , long), 或者timer.scheduleAtFixRate(timertask, long , long);注意第三个参数须是正数。

3。Timer总共启用了几个线程?
        新建一个Timer对象,就会新建一个伴随的线程,而且也是唯一的一个线程,该线程负责进行任务的调度和任务的执行
        用户在用户线程里(如mainthread)添加任务或者取消任务。
        用户可以在新建Timer的时候来传递一个boolean值给timer, 如new Timer(true), 这样伴随线程就是daemon线程了,在其它的非daemon的死亡之后也会自动死亡。

4。Timer执行精确吗?
        正是因为Timer采用一个线程来进行所有任务的调度和执行,所以即使我们不去计较任务的调度所要花费的时间,时间点靠后的任务也必须等到时间点比自己靠前的任务全部都执行完毕了之后才可以执行,如果时间点靠前的任务的执行需要花费很长的时间(执行时间大于它与后边的任务的时间差),那么后面的任务没有一点办法,只有延时执行。正因为如此,用timer 的前提是各个任务的执行时间相对来说比较短,否则肯定不准确。

5。Timer的原理简单介绍。
        使用一个queue来存放所有的任务,执行时间早的任务放在队列的前面,每次新加入一个任务,就要对队列重新排队,以保证时间的顺序正确。
         由执行线程在一个无限循环中来对任务进行轮询:1,如果队列中没有任务,queue.wait(). 2.有任务,取出第一个任务(也就是最早的一个任务)3,如果取出的任务的执行时间已过,马上执行之,否则,等待。queue.wait(long)。 4,如果任务是多次执行,那么在任务的执行时间的基础上加上对应的时间间隔,然后对queue重新排队。

6。schedule()和scheduleAtFixRate() 有什么区别?
        对于多次执行的任务,每个任务的执行时间并不一定是用户期望的时间,有可能是延时执行了。所以expectedtime, realtime之间是有差距的。schedule()的含义就是下次同一任务的执行时间的理论值=realtime+period
      scheduleAtFixRate()的含义就是下一次同一任务的执行时间的理论值=expectedtime+period
      也就是说schedule()的多次执行的第n+1次执行的真正执行的时间并不是第一次时间+n*period, 而是要加上前面的每次的延时时间
      scheduleAtFixRate()的多次执行的第n+1次执行的真正执行时间就是第一次时间+n*period      

分享到:
评论

相关推荐

    java.util.timer实现的简单定时任务

    使用java.util.timer实现的简单定时任务,在实现简单一次性定时任务时,使用java.util.timer非常的简单易用,适合没有接触过quartz的新手急用。

    java.util.ConcurrentModificationException 异常问题详解1

    java.util.ConcurrentModificationException 异常问题详解1

    java.util.concurrent.uml.pdf

    Java并发编程工具包java.util.concurrent的UML类结构图 PDF

    使用java.util.Timer实现任务调度

    主要为大家详细介绍了使用java.util.Timer实现任务调度,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    java SE API

    java.util.concurrent.atomic java.util.concurrent.locks java.util.jar java.util.logging java.util.prefs java.util.regex java.util.zip javax.accessibility javax.activity javax.crypto javax....

    Javase-6.0_中文API_HTML(最新更新)

    java.util.concurrent.atomic java.util.concurrent.locks java.util.jar java.util.logging java.util.prefs java.util.regex java.util.spi java.util.zip javax.accessibility javax.activation javax....

    java定时器

    java定时器,import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; 规定每天几点执行一次

    jdk 中文版

    java.util.concurrent.atomic java.util.concurrent.locks java.util.jar java.util.logging java.util.prefs java.util.regex java.util.spi java.util.zip javax.accessibility javax.activation javax....

    Java定时更新数据—定时器

     Java.util.Timer:一种线程设施,用于安排以后再后台线程中执行的任务.可安排任务执行一次或者定期重复执行.其中几个方法需要我们注意一下:  cancel():终止此计时器,丢弃所有当前已安排的任务。  ...

    android实现音乐播放器进度条效果

    本文实例为大家分享了android实现音乐...java.util.Timer:定时器,时时更新进度条。 main.xml样式文件 android:layout_height=wrap_content android:text=@string/hello> <EditText android:id=@+id/mediaFil

    JAVA_API1.6文档(中文)

    java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类。 javax.accessibility 定义了用户界面组件与提供对这些组件进行访问的辅助技术之间的协定。 javax....

    JAVA定时器word文档

    介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)

    jfeechart 柱形图

    利用awt开发 import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; import java.util.Random;...import java.util.Timer; public class ThreadApplet extends Applet implements Runnable {

    java定时器的使用

    在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。 对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。

    Java_Web定时器使用

    java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)

    JavaSE-6.0-英文手册(2008/11/30_FullUpdate)

    java.lang, java.util Packages Instrumentation Language and Utility Packages Monitoring and Management Package Version Identification Reference Objects Reflection Collections Framework ...

    java jdk-api-1.6 中文 chmd

    java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类。 javax.accessibility 定义了用户界面组件与提供对这些组件进行访问的辅助技术之间的协定。 javax....

    合并排序算法的演示

    import java.util.Timer; import java.util.TimerTask; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JScrollBar; ...

    Spring定时器

    让应用程序定时执行某个任务. 从Java 1.3开始,Java SDK就通过java.util.Timer类提供了基本的调度功能。这个类允许你调度一个任务(通过java.util.TimerTask子类定义)按任意周期运行。

    JavaAPI中文chm文档 part2

    java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类。 javax.accessibility 定义了用户界面组件与提供对这些组件进行访问的辅助技术之间的协定。 javax....

Global site tag (gtag.js) - Google Analytics