システムが構築されたばかりの場合、定期的に実行する必要があるタスクであることがよくありますが、そうでない場合は、誰かがjavaタイマーを推奨します
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest extends TimerTask {
private String jobName = "";
public TimerTest(String jobName) {
super();
this.jobName = jobName;
}
@Override
public void run() {
System.out.println("execute " + jobName);
}
public static void main(String[] args) {
Timer timer = new Timer();
long delay1 = 1 * 1000;
long period1 = 1000;
// 从现在开始 1 秒钟之后,每隔 1 秒钟执行一次 job1
timer.schedule(new TimerTest("job1"), delay1, period1);
long delay2 = 2 * 1000;
long period2 = 2000;
// 从现在开始 2 秒钟之后,每隔 2 秒钟执行一次 job2
timer.schedule(new TimerTest("job2"), delay2, period2);
}
}
またはシェデュラー、
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledExecutorTest implements Runnable {
private String jobName = "";
public ScheduledExecutorTest(String jobName) {
super();
this.jobName = jobName;
}
@Override
public void run() {
System.out.println("execute " + jobName);
}
public static void main(String[] args) {
ScheduledExecutorService service = Executors.newScheduledThreadPool(10);
long initialDelay1 = 1;
long period1 = 1;
// 从现在开始1秒钟之后,每隔1秒钟执行一次job1
service.scheduleAtFixedRate(
new ScheduledExecutorTest("job1"), initialDelay1,
period1, TimeUnit.SECONDS);
long initialDelay2 = 1;
long delay2 = 1;
// 从现在开始2秒钟之后,每隔2秒钟执行一次job2
service.scheduleWithFixedDelay(
new ScheduledExecutorTest("job2"), initialDelay2,
delay2, TimeUnit.SECONDS);
どちらも1台のマシンで問題なく実行できますが、複数のマシンがあると繰り返し実行されるため使用できません。
このソリューションの便利な点は、ロック(データベースやredisなど)を使用することです。これにより、プログラムが複雑になります。より良いソリューションは次のとおりです。linuxに付属のcrontabを使用します。
1.crontabを使用します
crontab -u //ユーザーのcronサービスを設定します
crontab-l //ユーザーのcronサービスの詳細を一覧
表示します
crontab- r //ユーザーのcronサービスを削除しますcrontab- e //ユーザーのcronサービスを編集しますcronサービス
2.cron式
基本フォーマット:
-
-
-
-
- コマンド時分割日、月、週
。コマンドの最初の列は、1から59までの分を示します。頻度には各分または/ 1を使用します。
- コマンド時分割日、月、週
-
-
-
2番目の列は1〜23時間を示します(0は0時を意味します)
3列目は日付1〜31を示します
4番目の列は1〜12か月
、5番目の列の識別番号は0〜6週を示します(0は日曜日を意味します)
列6で実行するコマンド