2017-01-22 5 views
2

У меня есть метод под названием exampleMethod. Когда я называю этот метод (он работает с сетью ...) несколько раз, когда происходит медленная сеть, требуется много времени ...Как настроить время для выполнения какого-либо метода в java?

Как установить максимальное время для выполнения?

Например, 10s.

Как это ...

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

Я надеюсь, вы меня понимаете, спасибо за любую помощь.,

+0

Это зависит от того, что делает ваш метод. Обычно блокирующие операции позволят тайм-ауту или прерыванию. – shmosel

+0

Возможный дубликат [Как отключить поток] (http://stackoverflow.com/questions/2275443/how-to-timeout-a-thread) – tucuxi

+0

Конечно, могу ли я написать собственный таймер-тайм-аут? Возможно? – rilav

ответ

0

Вы можете использовать ExecutorService, установите значение тайм-аута и отменить, если будущее тайм-аут передается для запроса прерывания потока:

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

Это не остановит задачу, она просто перестанет ее ждать. – shmosel

Смежные вопросы