Я хочу знать, как остановить выполнение указанной функции в течение требуемого времени в Java.
Например: Я могу вызвать функцию, вызванную print_data (). Если требуется больше времени для выполнения, я должен буду остановить выполнение той функции.
Действительно ли возможно остановить выполнение как это?
Заранее спасибо
Вы можете добавить несколько проверок к своей функции: сохранить отметку времени, когда функция начала работать, а затем периодически проверять это внутри функции, генерируя исключение, если функция занимает слишком много времени.
Это самый простой способ решить такую задачу на Java.
Вы можете использовать перечисление TimeUnit
enum из java.util.concurrent
, в частности метод timedJoin
.
Вы указываете время ожидания и поток. timedJoin
позволит вашему потоку выполняться до завершения или остановится, если обработка займет больше времени, чем разрешено тайм-аутом. Вы можете использовать анонимный класс, чтобы легко обернуть ваш метод в объект Thread
.
Это может быть очень просто:
SECONDS.timedJoin(
new Thread() {
public void run() {
print_data();
}
},
10);
для 10-секундного тайм-аута.
Не существует безопасного способа остановить выполнение потока, если только он не ведет себя кооперативно; например, регулярно проверяет флаг 'interrupted'.
@BobbyShaftoe предлагает следующее в комментарии:
Вы могли бы выполнить эту функцию в отдельном потоке, а затем прервать поток через некоторое время.
Это вводящий в заблуждение и опасный совет. Единственный способ "прервать" поток - это использовать устаревший метод Thread.stop()
. Если вы посмотрите на javadoc для этого метода, то увидите, что это принципиально опасный метод, который может иметь нежелательные и непредсказуемые побочные эффекты.
Следует также отметить, что решение @tonio не останавливает выполнение функции. Оно просто прекращает ожидание завершения выполнения функции. Функция может продолжать выполняться бесконечно, пожирая ресурсы без всякой пользы.