Maison  >  Article  >  Java  >  Description des tâches planifiées Java

Description des tâches planifiées Java

巴扎黑
巴扎黑original
2017-07-20 13:27:061429parcourir

1. Introduction

En Java, une tâche planifiée complète doit être complétée par deux classes : Timer et TimerTask. Ils sont définis dans l'API comme ceci, Timer : un outil que les threads utilisent pour planifier les tâches à exécuter dans les threads d'arrière-plan à l'avenir. Les tâches peuvent être programmées pour être exécutées une fois ou être répétées périodiquement. Par TimerTask : une tâche planifiée par un minuteur pour une exécution unique ou récurrente. Nous pouvons comprendre que Timer est un outil de minuterie utilisé pour planifier et exécuter des tâches spécifiées sur un thread d'arrière-plan, tandis que TimerTask est une classe abstraite et ses sous-classes représentent une tâche qui peut être planifiée par Timer.

Classe Timer

Dans la classe d'outils Timer, quatre méthodes de construction sont fournies. Chaque méthode de construction démarre le thread timer en même temps, la classe Timer peut garantir que plusieurs threads peuvent partager un. Objet Timer unique sans synchronisation externe, la classe Timer est donc thread-safe. Cependant, étant donné que chaque objet Timer correspond à un seul thread d'arrière-plan, qui est utilisé pour exécuter toutes les tâches de minuterie de manière séquentielle, le temps consommé par l'exécution de notre tâche de thread doit généralement être très court, mais en raison de circonstances particulières, une exécution de tâche de minuterie Si le temps est trop long, alors il occupera "exclusivement" le thread d'exécution des tâches du minuteur, et tous les threads suivants doivent attendre la fin de son exécution, ce qui retardera l'exécution des tâches suivantes et provoquera un empilement de ces tâches. Pour des situations spécifiques, nous. Analyse plus tard.

Lorsque le programme initialise le Timer, la tâche planifiée sera exécutée en fonction de l'heure que nous avons définie. Timer fournit la méthode de planification, qui dispose de plusieurs méthodes de surcharge pour s'adapter à différentes situations, comme suit :

Calendrier (tâche TimerTask, Date heure) : Planifiez l'exécution de la tâche spécifiée à l'heure spécifiée.

Planification (tâche TimerTask, Date firstTime, longue période) : planifiez la tâche spécifiée pour démarrer une exécution répétée à délai fixe à l'heure spécifiée.

Schedule(TimerTask task, long delay) : Planifiez l'exécution de la tâche spécifiée après le délai spécifié.

Calendrier (tâche TimerTask, long délai, longue période) : organise la tâche spécifiée pour une exécution répétée à délai fixe à partir du délai spécifié.

Dans le même temps, la méthode ScheduleAtFixedRate est également surchargée. La méthode ScheduleAtFixedRate est la même que Schedule, mais leur objectif est différent. La différence sera analysée plus tard.

planningAtFixedRate(TimerTask task, Date firstTime, long period) : planifiez la tâche spécifiée pour démarrer une exécution répétée à taux fixe à l'heure spécifiée.

planningAtFixedRate(TimerTask task, long delay, long period) : planifiez la tâche spécifiée pour démarrer une exécution répétée à taux fixe après le délai spécifié.

TimerTask

La classe TimerTask est une classe abstraite planifiée par Timer pour des tâches ponctuelles ou répétées. Il dispose d'une méthode abstraite run() qui est utilisée pour effectuer l'opération à effectuer par la tâche de minuterie correspondante. Par conséquent, chaque classe de tâches spécifique doit hériter de TimerTask, puis remplacer la méthode run().

De plus, il dispose de deux méthodes non abstraites :

boolean Cancel() : Annule cette tâche du minuteur.

long selectedExecutionTime() : renvoie l'heure d'exécution planifiée la plus récente de cette tâche.

2. Exemple :

Naims_task.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:p="http://www.springframework.org/schema/p"
  xmlns:task="http://www.springframework.org/schema/task"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:aop="http://www.springframework.org/schema/aop" 
  xsi:schemaLocation="http://www.springframework.org/schema/beans  
   
   http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
   http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
   http://www.springframework.org/schema/context/spring-context-4.0.xsd  
   http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
   http://www.springframework.org/schema/task/spring-task-4.0.xsd"><task:annotation-driven /> <!-- 定时器开关-->
 
  <bean id="myTask" class="com.wisoft.jazwfw.convenienceServices.controller.ConvenienceServicesController"></bean> 
 
  <task:scheduled-tasks> <!-- 这里表示的是每天23点59分执行一次 --><task:scheduled ref="myTask" method="getPubService" cron="0 59 23 * * ?" /> <!-- 这里表示的是每隔十秒执行一次 --><!-- <task:scheduled ref="myTask" method="print" cron="*/10 * * * * ?"/>  -->
  </task:scheduled-tasks> 
 
  <!-- 自动扫描的包名 -->
  <context:component-scan base-package="com.wisoft.jazwfw.convenienceServices.controller" /> 
  </beans>

Puis introduisez

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans><import resource="spring/Naims_ws.xml" /><import resource="spring/Naims_bo.xml" /><import resource="spring/Naims_dao.xml"/><import resource="spring/Naims_params.xml"/><import resource="spring/Naims_task.xml"/></beans>

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