2017-01-22 1 views
2

J'ai une méthode appelée exampleMethod. Lorsque j'appelle cette méthode (il fonctionne avec le réseau ...) à quelques reprises, quand le réseau est lent, il faut beaucoup de temps ...Comment configurer l'heure d'une méthode d'exécution en Java?

Comment puis-je définir une durée maximale pour l'exécution?

Par exemple 10s.

Comme ça ...

try { 
     exampleMethod(); 
} catch(Exeption e) { 
     LoggError("I was to slow"); 
} 

je l'espère, vous me comprenez, je vous remercie pour toute aide.,

+0

Cela dépend de ce que fait votre méthode. En général, les opérations de blocage permettent un délai d'attente ou une interruption. – shmosel

+0

Copie possible de [Comment temporiser un thread] (http://stackoverflow.com/questions/2275443/how-to-timeout-a-thread) – tucuxi

+0

Bien sûr, est-ce que je peux écrire un wrapping propre? C'est possible? – rilav

Répondre

0

Vous pouvez utiliser un ExecutorService, définir une valeur de délai d'attente et d'annuler l'avenir si le timeout est passé afin de demander une interruption de thread:

ExecutorService executorService = Executors.newSingleThreadExecutor(); 
    Future<?> future = null; 
    try { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       while (true) { 
        // it the timeout happens, the thread should be interrupted. Check it to let the thread terminates. 
        if (Thread.currentThread().isInterrupted()) { 
         return; 
        } 
        exampleMethod(); 
       } 

      } 
     }; 

     future = executorService.submit(r); 
     future.get(10, TimeUnit.SECONDS); 
    } 

    // time is passed 
    catch (final TimeoutException e) { 
     System.out.println("I was to slow"); 
     // you cancel the future 
     future.cancel(true); 
    } 
    // other exceptions 
    catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     executorService.shutdown(); 
    } 
} 
+1

Cela n'arrêtera pas la tâche, ça va juste arrêter de l'attendre. – shmosel