Maison >Java >javaDidacticiel >Comment puis-je implémenter un mécanisme de délai d'attente pour les tâches en Java à l'aide de Timers et d'ExecutorService ?
Définition d'une minuterie en Java
Cette question portait initialement sur la configuration d'une minuterie pour tenter une connexion à une base de données et lever une exception en cas de problème de connexion surgir. La question clarifiée va plus loin en demandant à un minuteur d'exécuter une tâche pendant une période de temps spécifiée, en lançant une exception si la tâche dépasse cette durée.
Définition d'une minuterie
Pour définir une minuterie, créez un objet java.util.Timer :
Timer timer = new Timer();
Pour exécuter la tâche une fois, planifiez-la en utilisant Timer.schedule() :
timer.schedule(new TimerTask() { @Override public void run() { // Database code here } }, 2*60*1000); // 2 minutes in milliseconds
Pour répéter la tâche à l'intervalle spécifié, utilisez Timer.scheduleAtFixedRate() :
timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { // Database code here } }, 2*60*1000, 2*60*1000);
Mécanisme de délai d'attente
Pour définir un délai d'expiration pour une tâche, utilisez un ExecutorService :
ExecutorService service = Executors.newSingleThreadExecutor(); try { Runnable r = new Runnable() { @Override public void run() { // Database task } }; Future<?> f = service.submit(r); f.get(2, TimeUnit.MINUTES); // attempt the task for 2 minutes } catch (InterruptedException e) { // Thread interrupted during sleep, wait, or join } catch (TimeoutException e) { // Took too long! } catch (ExecutionException e) { // Exception within the Runnable task } finally { service.shutdown(); }
Ce code s'exécutera normalement si la tâche se termine dans les 2 minutes. Sinon, une TimeoutException sera levée et le thread continuera à s'exécuter jusqu'à ce qu'il rencontre une exception dans la base de données ou la connexion réseau.
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!