Heim  >  Artikel  >  Java  >  So führen Sie Aufgaben regelmäßig in Java aus

So führen Sie Aufgaben regelmäßig in Java aus

angryTom
angryTomOriginal
2019-11-14 16:41:365113Durchsuche

So führen Sie Aufgaben regelmäßig in Java aus

Wie führt Java eine Methode regelmäßig aus?

Erstelle einen Thread.

import java.util.Date;
public class ThreadTest {
    public static void main(String[] args) {
        // 设置执行周期
        final long timeInterval = 3000;
        
        Runnable runnable = new Runnable() {
            public void run() {
                while (true) {
                    System.out.println("Task Run ... " + new Date());
                    
                    try {
                        Thread.sleep(timeInterval);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
    }
}
2. Verwenden Sie den API-Timer und TaskTimer, die mit JDK geliefert werden.

Was ist der Unterschied zwischen dieser Methode und der ersten einfachen und groben Methode? Er spiegelt sich hauptsächlich darin wider, dass Sie mit der API die Aufgabe zu einem bestimmten Zeitpunkt starten und verschieben können Sie können auch ein bestimmtes Zeitintervall festlegen, aber das Prinzip ist immer noch das gleiche. Es sollte gesagt werden, dass immer nur ein Thread die Aufgabe ausführt Viele Aufgaben starten wir. Wenn also beispielsweise eine Aufgabe nicht abgeschlossen wird und eine andere Aufgabe ausgeführt wird, kann es zu Parallelitätsproblemen kommen. Wenn in einer Aufgabe ein Fehler gemeldet wird, wird der Thread außerdem gestoppt.

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class MyTask extends TimerTask{

    private String name;
    
    public MyTask(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sf.format(new Date());
        System.out.println("exec MyTask ... 当前时间为:" + format);
        System.out.println(this.name +" 正在执行!" + sf.format(new Date()));
    }
    
    public static void main(String[] args) {
        Timer timer = new Timer();
        TimerTask task1 = new MyTask("Tasks 1");
        TimerTask task2 = new MyTask("Tasks 2");
        
        Calendar calendar1 = Calendar.getInstance();
        calendar1.add(Calendar.SECOND, 3);
        Calendar calendar2 = Calendar.getInstance();
        calendar2.add(Calendar.SECOND, 5);
        
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sf.format(new Date());
        System.out.println("当前时间为:" + format);
        
        timer.schedule(task1, calendar1.getTime(), 3000L);
        timer.schedule(task2, calendar2.getTime(), 3000L);
    }

}

Tatsächlich kapselt der Timer eine Task-Warteschlange und ein Time-Thread-Objekt. Die Referenz unserer benutzerdefinierten Task wird in die Warteschlange gestellt und wartet auf die Ausführung.

Es ist ungefähr diese Beziehung: Timer – TimerThread – TaskQueue – MyTask – run. Natürlich muss die endgültige Ausführungsmethode die run-Methode in unserer benutzerdefinierten Aufgabe sein. Weil unsere benutzerdefinierte Aufgabe TimeTask geerbt hat und diese Klasse die Runnable-Schnittstelle implementiert hat.

3. Verwenden Sie ScheduledExecutorService

ScheduledExecutorService wurde als gleichzeitige Toolklasse eingeführt, was die idealste Möglichkeit ist, geplante Aufgaben zu implementieren.

1. Im Vergleich zum einzelnen Thread von Timer werden Aufgaben über einen Thread-Pool ausgeführt.

2. Sie können die Verzögerungszeit für die erste Ausführung der Aufgabe flexibel einstellen.

3. Bietet eine gute Konvention zum Festlegen des Ausführungsintervalls.

import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class qwe {
    public static void main(String[] args) {
        //新建定时任务
        Runnable runnable = new Runnable() {
            //run方法中是定时执行的操作
            public void run() {
                System.out.println(new Date());
            }
        };
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        /*
         * 参数一:command:执行线程
         * 参数二:initialDelay:初始化延时
         * 参数三:period:两次开始执行最小间隔时间
         * 参数四:unit:计时单位
         */
        service.scheduleAtFixedRate(runnable, 0, 60, TimeUnit.SECONDS);
    }
}

php Chinesische Website, eine große Anzahl kostenloser

Java-Einführungs-Tutorials

, willkommen zum Online-Lernen!

Das obige ist der detaillierte Inhalt vonSo führen Sie Aufgaben regelmäßig in Java aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Vorheriger Artikel:So verpacken Sie JavaNächster Artikel:So verpacken Sie Java