我在java中调用一个我无法控制的方法.如果我没有得到它的回应,我想要杀死它并继续前进

Dal*_*ale 7 java multithreading

如果方法调用超过10秒,我想杀死它并继续前进.

多线程是解决这个问题的唯一选择吗?

如果我使用多线程,我很新,我的run方法只包含一个方法,如下所示.如果myMethod()卡在无限循环中,有没有办法打断这个线程?

public void run() {
    myMethod();
}
Run Code Online (Sandbox Code Playgroud)

我们假设myMethod()如下所示,更改它不是一个选项.

while(true){
    System.out.println("Thinking.");
        for (int i = 0; i < 100000; i++) {
            //wasting time
        }
}
Run Code Online (Sandbox Code Playgroud)

我打算使用Mik378的解决方案,但我认为这不会起作用,因为myMethod不会抛出InterruptedException异常.

NPE*_*NPE 7

使用线程来实现这一点很棘手.没有来自所述线程的合作,没有可移植且安全的方法来杀死线程.有关更多详细信息,请参阅如何在Java中终止线程?为什么Thread.stop[等]过时?

更强大的方法是在单独的进程的上下文中调用该方法,并终止该进程.

一个更好的方法是理解为什么事情一开始就陷入困境,并找出一种方法来防止它们被卡住(或者是一种超时并抛出异常的方法等).在你的情况下,这是否是现实的可能性,我不知道.