Heim  >  Artikel  >  Java  >  JAVA TIMER einfaches Erlernen der Verwendung

JAVA TIMER einfaches Erlernen der Verwendung

高洛峰
高洛峰Original
2017-01-11 16:12:401237Durchsuche

Der Timer verfügt über zwei Modi zum Ausführen von Aufgaben. Der am häufigsten verwendete Modus ist der Zeitplan, mit dem Aufgaben auf zwei Arten ausgeführt werden können: 1: zu einem bestimmten Zeitpunkt (Daten), 2: nach einer festen Zeit (int-Verzögerung). Geben Sie die Häufigkeit der Aufgabenausführung an:

import java.io.IOException;
import java.util.Timer;
public class TimerTest { 

    public static void main(String[] args){
           Timer timer = new Timer();
        timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.
        while(true){//这个是用来停止此任务的,否则就一直循环执行此任务了
            try { 
                int ch = System.in.read();
                if(ch-'c'==0){ 
                    timer.cancel();//使用这个方法退出任务

                }
            } catch (IOException e) { 
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } 
    }

    
    static class MyTask extends java.util.TimerTask{ 
        @Override
        public void run() { 
            // TODO Auto-generated method stub
            System.out.println("________");
        }
    }
    }

Wenn Sie JDK 5+ verwenden, gibt es auch einen ScheduleAtFixedRate-Modus, der verwendet werden kann um die Aufgabe mit einer festen Häufigkeit auszuführen. Beispiel: Im obigen Beispiel möchten wir, dass MyTask alle zwei Sekunden nach 1 Sekunde ausgeführt wird, aber weil Java nicht in Echtzeit ist (tatsächlich ist Java in Echtzeit). sehr schlecht...), daher kann die ursprüngliche Bedeutung, die wir im vorherigen Programm ausgedrückt haben, nicht strikt durchgesetzt werden. Wenn wir ScheduleAtFixedRate aufrufen, versucht der Timer, die Ausführungsfrequenz Ihrer Aufgabe bei 2 zu halten. Führen Sie das obige Programm aus. Unter der Annahme, dass „scheduleAtFixedRate“ verwendet wird, ist das folgende Szenario möglich: Nach 1 Sekunde wird MyTask einmal ausgeführt. Da das System ausgelastet ist, wird MyTask nach 2,5 Sekunden ein zweites Mal ausgeführt. Anschließend zeichnet der Timer diese Verzögerung auf und versucht, dies auszugleichen Diese Verzögerung wird in der nächsten Aufgabe ausgeführt. Nach 1,5 Sekunden wird MyTask dreimal ausgeführt: „Führen Sie eine Aufgabe mit einer festen Häufigkeit anstelle einer festen Verzögerungszeit aus.“ Hier erfahren Sie, wie Sie eine einzelne Timer-Aufgabe und alle Aufgaben beenden.

Weitere Artikel zum Erlernen der einfachen Verwendung von JAVA TIMER finden Sie auf der chinesischen PHP-Website!
package MyTimerTest;
import java.io.IOException;
import java.util.Timer;
/* 
 * 本类给出了使用Timer和TimerTaske的主要方法,其中包括定制任务,添加任务
 * 退出任务,退出定时器.
 * 因为TimerTask的status域是包级可访问的,所以没有办法在java.util.包外
 * 得到其状态,这对编程造成一些不便 .我们不能判断某个Task的状态了.
 * 
 */
public class TimerTest {
    public static void main(String[] args) { 
        Timer timer = new Timer();
        MyTask myTask1 = new MyTask();
        MyTask myTask2 = new MyTask(); 
        myTask2.setInfo("myTask-2");
        timer.schedule(myTask1, 1000, 2000);
        timer.scheduleAtFixedRate(myTask2, 2000, 3000); 
        while (true) {
 try {

                byte[] info = new byte[1024];
                int len = System.in.read(info); 
                String strInfo = new String(info, 0, len, "GBK");//从控制台读出信息
                if (strInfo.charAt(strInfo.length() - 1) == ' ') { 
                    strInfo = strInfo.substring(0, strInfo.length() - 2);
                }
                if (strInfo.startsWith("Cancel-1")) {                     myTask1.cancel();//退出单个任务
                    // 其实应该在这里判断myTask2是否也退出了,是的话就应该break.但是因为无法在包外得到
                    // myTask2的状态,所以,这里不能做出是否退出循环的判断. 
                } else if (strInfo.startsWith("Cancel-2")) {
      myTask2.cancel();
                } else if (strInfo.startsWith("Cancel-All")) {
                     timer.cancel();//退出Timer
                    break;
                } else { 
                    // 只对myTask1作出判断,偷个懒^_^
                    myTask1.setInfo(strInfo);
                }
            } catch (IOException e) {                 // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
 }
    static class MyTask extends java.util.TimerTask {
            String info = "^_^";
        @Override
        public void run() {

            // TODO Auto-generated method stub
            System.out.println(info);
        }
  public String getInfo() { 
            return info;
        }
        public void setInfo(String info) {

            this.info = info;
        }
    }
}
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn