Maison  >  Article  >  Java  >  Comment définir une minuterie pour l'exécution des tâches planifiées quotidiennement en Java ?

Comment définir une minuterie pour l'exécution des tâches planifiées quotidiennement en Java ?

PHPz
PHPzoriginal
2023-12-27 11:10:241373parcourir

Comment définir une minuterie pour lexécution des tâches planifiées quotidiennement en Java ?

Java timer : Comment définir une tâche d'exécution planifiée chaque jour ?

Dans le développement Java quotidien, nous rencontrons souvent le besoin d'effectuer régulièrement une certaine tâche chaque jour. Par exemple, effectuez une tâche de sauvegarde de données à 1h du matin tous les jours, ou envoyez un email quotidiennement à 20h, etc. Ainsi en Java, nous pouvons utiliser des timers pour réaliser une telle fonction.

Java fournit une variété de méthodes d'implémentation de minuterie.Cet article présentera deux méthodes basées sur Timer et ScheduledExecutorService pour configurer des tâches d'exécution planifiées quotidiennes et fournira des exemples de code spécifiques.

1. Utilisez la classe Timer pour implémenter des tâches planifiées chaque jour

La classe Timer est une classe de minuterie simple fournie par Java, qui peut être utilisée pour effectuer des tâches planifiées. Nous pouvons utiliser la méthode planning de la classe Timer pour configurer l'exécution planifiée des tâches chaque jour et utiliser la classe Date pour spécifier le moment auquel la tâche doit être exécutée.

Ce qui suit est un exemple de code qui utilise la classe Timer pour implémenter des tâches planifiées quotidiennes :

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

public class DailyTaskWithTimer {
    public static void main(String[] args) {
        Timer timer = new Timer();
        
        // 设置任务执行的时间(每天的定时时间)
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 1); // 设置时
        calendar.set(Calendar.MINUTE, 0);      // 设置分
        calendar.set(Calendar.SECOND, 0);      // 设置秒
        
        // 如果当前时间已经过了设定的定时时间,则将定时时间推迟到明天
        if (calendar.getTime().before(new Date())) {
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        
        // 执行任务
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                // TODO: 需要执行的任务逻辑
            }
        }, calendar.getTime(), 24 * 60 * 60 * 1000); // 24小时执行一次
    }
}

Dans le code ci-dessus, nous définissons l'heure d'exécution de la tâche via la classe Calendar. Il convient de noter que si l'heure actuelle a dépassé l'heure. régler l'heure de chronométrage, l'heure prévue sera reportée à demain. Utilisez ensuite la méthode de planification de Timer pour exécuter la tâche. Le premier paramètre est un objet TimerTask, qui définit la logique de la tâche qui doit être exécutée. Le deuxième paramètre est l'heure de début d'exécution de la tâche et le troisième paramètre est l'intervalle. heure de la tâche. Ici, configuré pour être exécuté toutes les 24 heures.

2. Utilisez ScheduledExecutorService pour mettre en œuvre l'exécution planifiée des tâches chaque jour

ScheduledExecutorService est une minuterie avancée fournie par Java, qui offre un moyen plus flexible et fiable d'exécuter des tâches planifiées. Nous pouvons utiliser la méthode planningAtFixedRate de ScheduledExecutorService pour implémenter l'exécution planifiée des tâches chaque jour.

Ce qui suit est un exemple de code qui utilise ScheduledExecutorService pour implémenter l'exécution planifiée des tâches chaque jour :

import java.util.Calendar;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class DailyTaskWithScheduledExecutor {
    public static void main(String[] args) {
        ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
        
        // 设置任务执行的时间(每天的定时时间)
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 1); // 设置时
        calendar.set(Calendar.MINUTE, 0);      // 设置分
        calendar.set(Calendar.SECOND, 0);      // 设置秒
        
        // 如果当前时间已经过了设定的定时时间,则将定时时间推迟到明天
        if (calendar.getTime().before(new Date())) {
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        
        // 执行任务
        executorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                // TODO: 需要执行的任务逻辑
            }
        }, calendar.getTimeInMillis() - System.currentTimeMillis(), 24 * 60 * 60 * 1000, TimeUnit.MILLISECONDS); // 24小时执行一次
        
        // 关闭定时器
        //executorService.shutdown();
    }
}

Dans le code ci-dessus, nous définissons l'heure d'exécution de la tâche via la classe Calendar. Il convient de noter que si l'heure actuelle est passée. l'heure de chronométrage réglée, puis reporter l'heure prévue à demain. Utilisez ensuite la méthode planningAtFixedRate de ScheduledExecutorService pour exécuter la tâche. Le premier paramètre est un objet Runnable, qui définit la logique de la tâche qui doit être exécutée. Le deuxième paramètre est le temps de retard initial de la tâche. définir l'heure. La différence par rapport à l'heure actuelle. Le troisième paramètre est l'intervalle d'exécution de la tâche, qui est défini pour être exécuté toutes les 24 heures. Le quatrième paramètre est l'unité de temps, qui est définie en millisecondes. Étant donné que ScheduledExecutorService est un pool de threads, nous devons également fermer manuellement le pool de threads une fois la tâche exécutée.

Résumé :

Cet article présente deux façons de configurer des tâches d'exécution planifiées quotidiennes en Java : en utilisant les classes Timer et ScheduledExecutorService. Les deux méthodes peuvent réaliser la fonction d’exécution de tâches régulièrement chaque jour. Les développeurs peuvent choisir une méthode appropriée pour planifier les tâches planifiées en fonction des besoins réels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn