中断异常捕获中的方法调用是否会完成 运行() 方法并使线程完成
Will method call in a interrupt exception catch finish the run() method and make the thread finished
我有一个使用以下 run()
方法的线程。
我写这段代码是为了在 2 秒后断定失败,如果在那 2 秒内没有发生中断,则执行 startNewRound()
。如果线程在 isLateToTimeout = true
时被中断,它应该调用 startNewRound()
并完成执行,以便线程终止。对于任何其他中断,它应该再次开始等待 2 秒。
我想知道的是在 startNewRound()
调用 catch 块后,这个线程是否会被终止(正如我上面所解释的)。
public void run() {
try {
Thread.sleep(2000);
System.out.println("FAILURE"));
startNewRound();
} catch (InterruptedException e) {
if (isLateToTimeout){
startNewRound();
}
else{
run();
}
}
}
在@BoristheSpider 的输入后,我为 运行 方法想出了这个解决方案。
public void run() {
int i = 0;
while(i<=200){
if (i == 200){
startNewRound();
break;
}
else{
try {
Thread.sleep(10);
} catch (InterruptedException e) {
if (isLateToTimeout){
startNewRound();
break;
}
else{
i = 0;
}
}
}
i++;
}
}
希望这是在两次调用 startNewRound()
后正确终止线程而不导致堆栈溢出的解决方案。
我有一个使用以下 run()
方法的线程。
我写这段代码是为了在 2 秒后断定失败,如果在那 2 秒内没有发生中断,则执行 startNewRound()
。如果线程在 isLateToTimeout = true
时被中断,它应该调用 startNewRound()
并完成执行,以便线程终止。对于任何其他中断,它应该再次开始等待 2 秒。
我想知道的是在 startNewRound()
调用 catch 块后,这个线程是否会被终止(正如我上面所解释的)。
public void run() {
try {
Thread.sleep(2000);
System.out.println("FAILURE"));
startNewRound();
} catch (InterruptedException e) {
if (isLateToTimeout){
startNewRound();
}
else{
run();
}
}
}
在@BoristheSpider 的输入后,我为 运行 方法想出了这个解决方案。
public void run() {
int i = 0;
while(i<=200){
if (i == 200){
startNewRound();
break;
}
else{
try {
Thread.sleep(10);
} catch (InterruptedException e) {
if (isLateToTimeout){
startNewRound();
break;
}
else{
i = 0;
}
}
}
i++;
}
}
希望这是在两次调用 startNewRound()
后正确终止线程而不导致堆栈溢出的解决方案。