1、timer是线程吗?
2、使用timer耗费的资源多,还是自己写个线程耗费的资源多?两个实现的功能都是一样的

解决方案 »

  1.   

    JVM上面的Timer的实现可能有苦衷吧,是一个线程:Ref:
    Corresponding   to   each   Timer   object   is   a   single   background   thread   that   is   used   to   execute   all   of   the   timer's   tasks,   sequentially.   Timer   tasks   should   complete   quickly.   If   a   timer   task   takes   excessive   time   to   complete,   it   "hogs"   the   timer's   task   execution   thread.但是实际上,以Win32编程为例,WM_TIMER只是在当前线程的一个消息而已,
    当前线程只要处理消息就可以了。这样就避免了开线程的巨大耗费了。
    不过建议Javaer还是能用Timer的时候用Timer,而不是Thread。
      

  2.   

    timer是线程的timer类是很占资源,可以让Timer的间隔尽量长一些
    或是在Timer中的代码少一点
      

  3.   


    还好,其实可以复用Timer,这是一种技巧吧,我以前写Win32程序的时候用过。
    思想依然可以使用。比如说,我需要一个间隔1秒的和间隔2秒的计时器。那么其实,我们可以借用一个Timer对象,来达到减少资源耗费的效果。具体做法就是把Timer和TimerTask解耦合,
    然后把TimerTask和他的Interval变成一个Observer,register给Timer框架。框架轮询所有的TimerTask,如果到了Its turn,就Execute它的Task。这种结构上面的负责,这是在单独线程内产生的,而不是导致多个线程切换的巨大消耗。
    这么说吧,你在一个线程内解析一个xml所需要的时间,可能都比两个简单的线程切换来得短。
      

  4.   

    哇,什么楼啊?除了我以外,头像全部是女性,就我一个boy啊?
      

  5.   

    public class Timer
    extends Object
    一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。 与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。
    计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,
    那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,
    而这些任务就可能“堆在一起”,并且在上述令人讨厌的任务最终完成时才能够被快速连续地执行。 对 Timer 对象最后的引用完成后,并且 所有未处理的任务都已执行完成后,
    计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。
    默认情况下,任务执行线程并不作为守护线程 来运行,所以它能够阻止应用程序终止。
    如果调用者想要快速终止计时器的任务执行线程,那么调用者应该调用计时器的 cancel 方法。 如果意外终止了计时器的任务执行线程,例如调用了它的 stop 方法,
    那么所有以后对该计时器安排任务的尝试都将导致 IllegalStateException,就好像调用了计时器的 cancel 方法一样。 此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。 此类不 提供实时保证:它使用 Object.wait(long) 方法来安排任务。 实现注意事项:此类可扩展到大量同时安排的任务(存在数千个都没有问题)。在内部,它使用二进制堆来表示其任务队列,所以安排任务的开销是 O(log n),其中 n 是同时安排的任务数。 实现注意事项:所有构造方法都启动计时器线程。 
    甘草讲的不错   学习了
      

  6.   

    timer是线程
    不过哪个多我也不知道,我要是你就自己写一个对比一下。
    这样还能多练习一下。呵呵