我正在尝试编写一个程序来中断子线程。
但为什么System.out.println("main method")
先被打印然后执行t.run()
?
import java.util.*;
import java.lang.*;
import java.io.*;
class TryCatchReturn extends Thread
{
public void run()
{
for(int i=0;i<5;i++)
{
try
{
System.out.println("i will get interrupted");
}
catch (Exception e)
{
System.out.println("catch interruputed");
}
}
}
}
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
TryCatchReturn t=new TryCatchReturn();
t.start();
t.interrupt();
System.out.println("main method");
}
}
答案 0 :(得分:0)
你开始了这个主题。主方法的下一行代码不会等待你的线程完成。
答案 1 :(得分:0)
正如在注释中所讨论的那样,由于线程main
和t
在调用start()
方法时并发运行,因此无法保证线程执行顺序。 run()
方法在最后打印“main方法”,因为它在同一个线程上运行。运行你的程序,我在调试时获得了以下输出。
我也在第一个实例上得到了你的输出(没有调试),这传达了命令是非确定性的......:)
希望这有帮助!
答案 2 :(得分:0)
答案 3 :(得分:0)
欢迎使用多线程。
以下是发生的事情:
唯一有保证的执行顺序如下:
首先发生第1步
第二步发生在第二位
以&#34; - &#34;开头的所有步骤发生在第2步之后。
步骤-mb发生在步骤-ma
之后
步骤-2a发生在步骤-2bi和-2bii之前
您无法预测步骤-2bi或步骤-2bii是否会发生。 这取决于线程执行顺序。
如果将循环从5更改为5000000,则步骤-2bi比步骤-2bii更有可能发生
答案 4 :(得分:0)
当你运行程序时,将创建两个线程,一个是主方法运行的主线程,另一个是&#39; t&#39; TryCatchReturn类型的线程。
当你在main()方法中调用start()方法时,mainThread和t线程都会按照自己的步调启动和完成。有时mainThread可能会先完成,有时候线程可能会完成执行。
如果你想要先完成线程,那么你必须告诉主线程等待执行t线程。这是使用 join()方法完成的。
你也可以通过调用 sleep()方法让主线程执行一段时间。