У меня есть метод, который возвращает String, возможно ли, что после определенного времени treshold excedeed fot этот метод возвращает некоторую определенную строку?Установить ограничение времени выполнения для метода в java
ответ
Guava library имеет очень красивый TimeLimiter
, который позволяет вам делать это на любом методе, определяемом интерфейсом. Он может генерировать прокси для вашего объекта, который имеет «встроенный» тайм-аут.
это кажется, просто позвольте мне спросить вас об этом, этот пример не ясен для меня, потому что я noob, 'для возврата значения target.someMethod()', этот «target» относится к экземпляру класса? – London
другой вопрос, что делать, если этот метод открывает несколько сессий, они будут закрыты? Или мне нужно поставить эти закрытые сеансы перед возвратом значения по умолчанию? – London
@London. 1) да, это то, что это значит. 2) метод должен закрыть эти сеансы с помощью 'try {...} finally {...}'. Но это должно быть так или иначе !!! –
Я делал что-то подобное в прошлом при нерестах внешнего процесса с Runtime.getRuntime().exec(command)
. Я думаю, что вы могли бы сделать что-то подобное в вашем методе:
Timer timer = new Timer(true);
InterruptTimerTask interruptTimerTask =
new InterruptTimerTask(Thread.currentThread());
timer.schedule(interruptTimerTask, waitTimeout);
try {
// put here the portion of code that may take more than "waitTimeout"
} catch (InterruptedException e) {
log.error("timeout exeeded);
} finally {
timer.cancel();
}
и здесь InterruptTimerTask
/*
* A TimerTask that interrupts the specified thread when run.
*/
protected class InterruptTimerTask extends TimerTask {
private Thread theTread;
public InterruptTimerTask(Thread theTread) {
this.theTread = theTread;
}
@Override
public void run() {
theTread.interrupt();
}
}
«Scedule» не используется в качестве ограничения по времени, но в качестве задержки ... так что «waitTimeout» в этом случае является задержкой до выполнения прерыванияTimerTask ... из API: расписание указанной задачи для выполнения после указанного задержка. – Kayvar
Я получаю сообщение об ошибке в try/catch: 'Unreachable catch block для InterruptedException. Это исключение никогда не выбрасывается из тела оператора try.' – Michael
Как ответил на @MarcoS
Я нашел тайм-аут не возникает, если метод блокировки что-то и не выпустить время процессора для таймера. Тогда Timer не может начать новую тему. Итак, я немного поменяю начальный поток. Немедленно и спать внутри темы.
InterruptTimerTaskAddDel interruptTimerTask = new InterruptTimerTaskAddDel(
Thread.currentThread(),timeout_msec);
timer.schedule(interruptTimerTask, 0);
/*
* A TimerTask that interrupts the specified thread when run.
*/
class InterruptTimerTaskAddDel extends TimerTask {
private Thread theTread;
private long timeout;
public InterruptTimerTaskAddDel(Thread theTread,long i_timeout) {
this.theTread = theTread;
timeout=i_timeout;
}
@Override
public void run() {
try {
Thread.currentThread().sleep(timeout);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace(System.err);
}
theTread.interrupt();
}
}
Вы можете использовать АОП и @Timeable
аннотацию из jcabi-aspects (я разработчик):
@Timeable(limit = 1, unit = TimeUnit.SECONDS)
String load(String resource) {
while (true) {
if (Thread.currentThread.isInterrupted()) {
throw new IllegalStateException("time out");
}
// execution as usual
}
}
Когда лимит времени будет достигнут ваш поток получит interrupted()
флаг установлен в true
и это ваша работа правильно справиться с этой ситуацией и остановить выполнение.
Кроме того, проверить этот блог: http://www.yegor256.com/2014/06/20/limit-method-execution-time.html
- 1. R - Установить ограничение времени выполнения в цикле
- 2. ограничение времени выполнения выборки потоков в java
- 3. ограничение времени выполнения для Runnable thread в java?
- 4. Поиск времени выполнения метода в Java
- 5. Ограничение времени выполнения Oracle/ASPX
- 6. Как установить ограничение времени выполнения в Ruby/Rails/Passenger/Nginx?
- 7. PHP cURL - ограничение времени выполнения
- 8. установить время выполнения метода выбора
- 9. Установите ограничение времени для игры java Boggle
- 10. Как установить максимальное время выполнения для метода?
- 11. Как установить лимит времени выполнения для потока?
- 12. Время выполнения метода в java
- 13. Java, ограничение времени чтения BufferedReader
- 14. Ограничение времени выполнения команды в Python
- 15. Получите ограничение времени выполнения arount в php
- 16. Установка максимального времени выполнения для метода/потока
- 17. Moq framework для проверки времени выполнения метода
- 18. Проверка времени выполнения для метода C#
- 19. Ошибка времени выполнения метода 'Копировать'
- 20. Ограничение циклов обработки выполнения потоков в Java
- 21. Время выполнения для метода Arrays.Sort в Java
- 22. SWF Максимальное ограничение времени выполнения рабочего процесса
- 23. Как установить ограничение по времени функции?
- 24. Как настроить время для выполнения какого-либо метода в java?
- 25. Java: разрешение метода выполнения
- 26. Стратегия времени ожидания для метода Java
- 27. как установить таймер для вычисления времени выполнения
- 28. Задание времени выполнения в java.
- 29. Ограничение времени выполнения кода пользователя (JRuby)
- 30. Как установить ограничение по времени для функции с защищенной областью
WAHT вы хотите, чтобы назвать ваш метод, и если время его выполнения превышает определенное количество возвращающегося строка является константой? – reef
@reef nop, когда метод x, который возвращает некоторую строку, достигает, например, 6 секунд, когда он возвращает некоторую строку ошибки .. или просто имеет какой-то обратный вызов, который я могу использовать для обработки ошибки времени. – London