Maison Java javaDidacticiel 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 ?

Dec 27, 2023 am 11:10 AM
java 定时器 Exécuté tous les jours

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小时执行一次
    }
}
Copier après la connexion

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();
    }
}
Copier après la connexion

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 de ce site Web
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

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

Racine carrée en Java

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Nombre parfait en Java

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Générateur de nombres aléatoires en Java

Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

Numéro Armstrong en Java

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Weka en Java

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Numéro de Smith en Java

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Questions d'entretien chez Java Spring

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Break or Return of Java 8 Stream Forach?

See all articles