timer timerTask小小分析

首先看一看 timer timerTask如何调用 ? 

力•司

  Timer  timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("哈哈 我正在运行;");
            }
        } ;
        timer.schedule(task,1,100);
一个非常简单的例子。首先我们看下 TimerTask的结构:
public abstract class TimerTask implements Runnable {
  
    final Object lock = new Object();//将对象当做一个锁来处理
   
    int state = VIRGIN;//线程的状态

    static final int VIRGIN = 0;

    static final int SCHEDULED   = 1;
   
    static final int EXECUTED    = 2;
  
    static final int CANCELLED   = 3;

    long nextExecutionTime;
  
    long period = 0;
    
    protected TimerTask() {
    }

    public boolean cancel() {
        synchronized(lock) {
            boolean result = (state == SCHEDULED);
            state = CANCELLED;
            return result;
        }
    }

  
    public long scheduledExecutionTime() {
        synchronized(lock) {
            return (period < 0 ? nextExecutionTime + period
                               : nextExecutionTime - period);
        }
    }
}
先看一看 timer timerTask如何调用 ? TimerTask仅仅实现了Runnable。
public class Timer {
  
    private TaskQueue queue = new TaskQueue(); //存放任务的
    
    private TimerThread thread = new TimerThread(queue); 

}
这里非常重要的一个类是:TimerThread

请看他的处理机制:
private void mainLoop() {
        while (true) {
             //....do something
        }
}
实际上TimerThread的机制是死循环调用,当发现队列中存在任务则执行。

 

你可能感兴趣的:(timer,timertask)