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(); } }
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); } }
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); } }
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!