gpt4 book ai didi

java - 如果在线程中 InterruptedException 的 catch block 内使用 "return",它会在哪里返回?

转载 作者:行者123 更新时间:2023-12-02 13:38:48 25 4
gpt4 key购买 nike

这对您来说可能是一个非常简单的问题,但如果您能帮助消除我对此的疑问,我将不胜感激。

假设我创建了一个使用 sleep() 方法的线程,并且从我的 main 方法中中断了它。

这是我的代码片段

class myThread implements Runnable{
volatile boolean checking=true;
int counter =1;
public void run()
{
while(checking)
{
System.out.println(Thread.currentThread().getName() + " - count - "+counter++);
try{
Thread.sleep(1000);
}catch(InterruptedException e){
System.out.println("Interrupted");
Thread.currentThread().interrupt();
return; //line of confusion
}

}
}
public void stopCounting()
{
checking = false;
}
public boolean getCheker()
{
return checking ;
}

}
//main class
public class Demo{
public static void main(string args[])
{
myThread th = new myThread();
Thread t1 = new Thread(th);
t1.start();
for(int i=0;i<50000;i++)
{
//do nothing
System.out.println("Do nothing...");
}
t1.interrupt();
System.out.println("Press enter to stop the counter....");

Scanner sc = new Scanner(System.in);
sc.nextLine();
th.stopCounting();

//this line is executed when I am not using return statement
// in thread
System.out.println("value of while loop cheker is: "+th.getCounter());
}
}

上面的例子中的“return”返回到哪里呢?

情况 1: 我检查了 catch block 中是否保留了“return”关键字,最后执行的行再次来自主方法,即“Press Enter to stop the counter... ”

情况 2: 如果我省略 return 语句,则 main 中最后执行的行是 "System.out.println("value of counter is "+th.getCheker());"

我的问题是,为什么在第一种情况下也行“System.out.println(“计数器的值是”+th.getCheker());”没有执行?

我认为,当调用 return 时,控件应该从线程的“run()”方法返回到 main 中线程启动的位置。因此,当时尚未在 main 中执行的语句现在应该执行。但似乎如果我使用 return 语句,应用程序就会结束。主力也回归了。此后没有任何语句被执行。您能解释一下吗?我缺少什么?

最佳答案

您的“困惑线”将导致线程的 run() 方法返回。这将导致线程死亡,因为当 run() 返回时,线程总是死亡。

<小时/>

“情况 1:”与“情况 2:”

您的“困惑线”包含在一个循环中。如果您取出 return 语句,则 run() 方法此时不会返回:它将返回到 while(检查)循环。

<小时/>

I thought while return is called the control should return from the "run()" method of the thread to the place in main from where the thread is started.

线程不是这样工作的。新线程没有什么可返回的。 main() 线程的工作是执行启动新线程之后的语句。当新线程的 run() 方法完成时,除了死亡之外,它没有什么可做的。

关于java - 如果在线程中 InterruptedException 的 catch block 内使用 "return",它会在哪里返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42860706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com