Timer类提供线程用于调度任务的方法调用,例如在一些常规时刻之后运行代码块。每个任务可以被安排为运行一次或重复执行次数。每个计时器onject与后台线程相关联,后台线程负责执行计时器对象的所有任务。
注意:

  • Timer类是线程安全的。
  • Timer类使用二进制堆数据结构来存储其任务。

Java中的Java.util.Timer类构造函数:

  • Timer():创建一个新的计时器
  • Timer(boolean isDaemon):创建一个新的计时器,可以指定其关联的线程作为守护程序运行
  • Timer(String name):创建一个新的计时器,其关联的线程具有指定的名称
  • Timer(String name,boolean isDaemon):创建一个新的计时器,其关联的线程具有指定的名称,并且可以指定作为守护程序运行

Java中的Java.util.Timer类:

public class Timer
        extends Object

从类java.lang.Object继承的方法

  • clone
  • equals
  • finalize
  • getClass
  • hashCode
  • notify
  • notifyAll
  • toString
  • wait

Java中的Java.util.Timer类的方法:

  1. cancel():java.util.Timer.cancel()终止此计时器,丢弃当前计划的任何任务。不会干扰当前正在执行的任务(如果存在)。一旦计时器终止,它的执行线程就会正常终止,并且不再可以在其上安排任务。
    语法:

    public void cancel()
  2. purge():java.util.Timer.purge()从此计时器的任务队列中删除所有已取消的任务
    语法:

    public int purge()
    返回: 
    从队列中删除的任务数
  3. schedule(TimerTask task, Date time):java.util.Timer.schedule(TimerTask task, Date time)计划在指定时间执行的指定任务
    语法:

    public void schedule(TimerTask task, Date time)
    参数:
    task - 要安排的任务。
    time - 执行任务的时间。
    抛出:
    IllegalArgumentException  - 如果time.getTime()为负数。
    IllegalStateException  - 如果已安排或取消任务, 
    计时器被取消,或计时器线程终止。
    NullPointerException  - 如果task或time为null
  4. schedule(TimerTask task, Date firstTime, long period): java.util.Timer.schedule(TimerTask task, Date firstTime, long period)从指定的时间开始,为重复的固定延迟执行安排指定的任务
    语法:

    public void schedule(TimerTask任务,Date firstTime,long period)
    参数:
    task - 要安排的任务。
    firstTime  - 第一次执行任务。
    period  - 连续任务执行之间的时间(以毫秒为单位)。
    抛出:
    IllegalArgumentException  - 如果firstTime.getTime()<0,
     或者句号<= 0
    IllegalStateException  - 如果已安排任务 
    或取消,计时器被取消, 
    或计时器线程终止。
    NullPointerException  - 如果task或firstTime为null
    // Java program to demonstrate
    //schedule method calls of Timer class
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    class Helper extends TimerTask
    {
    	public static int i = 0;
    	public void run()
    	{
    		System.out.println("Timer ran " + ++i);
    	}
    }
    
    public class Test
    {
    	public static void main(String[] args)
    	{
    		
    		Timer timer = new Timer();
    		TimerTask task = new Helper();
    		
    		timer.schedule(task, 2000, 5000);
    		
    	}
    }
    

    输出:

    Timer ran 1
    Timer ran 2
    Timer ran 3
    Timer ran 4
    Timer ran 5
    .
    .
    .
  5. schedule(TimerTask task, long delay): java.util.Timer.schedule(TimerTask task, long delay) 在指定的延迟语法后调度指定的任务执行

    public void schedule(TimerTask task, long delay):
    参数:
    task - 要安排的任务。
    delay - 执行任务前的延迟(以毫秒为单位)。
    抛出:
    IllegalArgumentException  - 如果延迟为负,
    或者延迟+ System.currentTimeMillis()是否定的。
    IllegalStateException  - 如果已安排任务 
    或取消,计时器被取消, 
    或计时器线程终止。
    NullPointerException  - 如果task为null
  6. schedule(TimerTask task, long delay, long period): java.util.Timer.schedule(TimerTask task, long delay, long period) 在指定的延迟语法后开始,为重复的固定延迟执行安排指定的任务
    public void schedule(TimerTask task, long delay, long period)
    参数:
    task - 要安排的任务。
    delay - 执行任务前的延迟(以毫秒为单位)。
    period  - 连续任务执行之间的时间(以毫秒为单位)。
    抛出:
    IllegalArgumentException  - 如果delay <0, 
    或者延迟+ System.currentTimeMillis()<0,或 
    期间<= 0
    IllegalStateException  - 如果已安排任务 
    或取消,计时器被取消, 
    或计时器线程终止。
    NullPointerException  - 如果task为null
  7. scheduleAtFixedRate(TimerTask task,Date firstTime,long period):java.util.Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)从指定时间开始,为重复的固定速率执行调度指定的任务语法:
    public void scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
    参数:
    task - 要安排的任务。
    firstTime  - 第一次执行任务。
    period  - 连续任务执行之间的时间(以毫秒为单位)。
    抛出:
    IllegalArgumentException  - 如果firstTime.getTime()<
    0或句点<= 0
    IllegalStateException  - 如果已安排任务
     或取消,计时器被取消, 
    或计时器线程终止。
    NullPointerException  - 如果task或firstTime为null
  8. scheduleAtFixedRate(TimerTask task, long delay, long period): java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period) 在指定的延迟语法后开始,为重复的固定速率执行调度指定的任务
    public void scheduleAtFixedRate(TimerTask task, long delay, long period)
    参数:
    task - 要安排的任务。
    delay - 执行任务前的延迟(以毫秒为单位)。
    period  - 连续任务执行之间的时间(以毫秒为单位)。
    抛出:
    IllegalArgumentException  - 如果delay <0, 
    或者延迟+ System.currentTimeMillis()<0,或 
    期间<= 0
    IllegalStateException  - 如果任务已经存在 
    预定或取消,计时器被取消, 
    或计时器线程终止。
    NullPointerException  - 如果task为null
    // Java program to demonstrate
    // scheduleAtFixedRate method of Timer class
    
    import java.util.Timer;
    import java.util.TimerTask;
    import java.util.*;
    
    
    class Helper extends TimerTask
    {
        public static int i = 0;
        public void run()
        {
            System.out.println("Timer ran " + ++i);
            if(i == 4)
            {
                synchronized(Test.obj)
                {
                    Test.obj.notify();
                }
            }
        }
        
    }
    
    
    public class Test
    {
        protected static Test obj;
        public static void main(String[] args) throws InterruptedException
        {
            obj = new Test();
            
            //creating a new instance of timer class
            Timer timer = new Timer();
            TimerTask task = new Helper();
    
            //instance of date object for fixed-rate execution
            Date date = new Date();
    
            timer.scheduleAtFixedRate(task, date, 5000);
            
            System.out.println("Timer running");
            synchronized(obj)
            {
                //make the main thread wait
                obj.wait();
                
                //once timer has scheduled the task 4 times, 
                //main thread resumes
                //and terminates the timer
                timer.cancel();
                
                //purge is used to remove all cancelled 
                //tasks from the timer'stak queue
                System.out.println(timer.purge());
            }
        }
    }
    

    输出:

    Timer running
    Timer ran 1
    Timer ran 2
    Timer ran 3
    Timer ran 4
    0
 
转载请保留页面地址:https://www.breakyizhan.com/java/4900.html