If the method call takes more than 10 seconds I want to kill it and move on.
Is multi-threading my only option to solve this problem?
If I go with multi-threading which I’m very new at, my run method would only contain the one method as follows. If myMethod() gets stuck in an infinite loop is there a way to interrupt this thread?
public void run() {
myMethod();
}
Let’s assume myMethod() is the following and changing it is not an option.
while(true){
System.out.println("Thinking.");
for (int i = 0; i < 100000; i++) {
//wasting time
}
}
I was going for Mik378’s solution, but I don’t think this will work as myMethod doesn’t throw the InterruptedException exception.
Using threads to achieve this is tricky. There is no portable and safe method to kill a thread without cooperation from said thread. For further details, see How do you kill a thread in Java? and Why are
Thread.stop[et al] deprecated?A more robust approach is to call the method in the context of a separate process, and kill that process.
An even better approach is to understand why things are getting stuck in the first place, and figure out a way to prevent them from getting stuck (or a way to have a timeout and throw an exception etc). Whether that’s a realistic possibility in your case, I don’t know.