Общий вопрос для моего вопроса состоял в том, как мы обнаруживаем, что какой-либо вызов функции длился слишком долго, так что мы хотим его прекратить?Как ограничить время выполнения потока и завершить его, если он работает слишком долго?
На верхней части моей головы, я думаю использовать нить для выполнения этой функции, и убить нить, если он работает слишком долго, как определено ниже:
class MyThread extends Thread
{
public void run()
{
someFunction();
}
}
И сказать SomeFunction может быть:
public void someFunction()
{
// Unknown code that could take arbitrarily long time.
}
В приведенном выше коде someFunction()
может занять некоторое время, чтобы закончить или использовать его навсегда, поэтому скажите, что я хочу остановить его, когда он слишком долго.
Однако в реализации потока Java, по-видимому, я не могу использовать общую переменную или любую временную метку в потоке, так что поток будет иметь смысл времени, потому что someFunction()
смешно атомизирует и такой код проверки на отметку времени может идти только после someFunction
, что становится бесполезным, поскольку в момент выполнения кодирования некоторая функция уже выполнена.
ПРИМЕЧАНИЕ: Я также хочу сделать это с someFunction()
, являющимся агностиком. То есть someFunction()
не должен беспокоиться о том, сколько времени он запускает. Он просто не должен об этом знать.
Может ли кто-нибудь дать представление о том, как я могу выполнить эту функцию?
Вы говорите о тупике? Я не ожидаю, что люди будут писать код, как показано выше. Дайте нам точный сценарий. – SMA
@almasshaikh В замках нет ничего. Я просто спрашиваю, хочу ли я убедиться, что один поток не будет работать слишком долго или мы его убьем, как нам это сделать? – OneZero
используйте другой запланированный поток, который запускает ваш поток, начинающийся с ссылки на поток в нем, и просыпается, скажем, через час, и если он все еще прерывает его (если ваш поток реагирует на прерывание). – SMA