[英]why “main method”println is printing first
我试图编写一个程序来中断子线程。
但是,为什么首先打印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");
}
}
您启动了线程。 Main方法的下一行代码不会等待您的线程完成。
如果线程未处于睡眠或等待状态,则调用interrupt()方法将执行正常行为,并且不会中断线程,而是将中断标志设置为true。
正如Yunes所提到的,主线程和新线程都共存并一起运行。
也看看这个 。
欢迎使用多线程。
这是正在发生的事情:
唯一保证的执行顺序如下:
步骤1首先发生。
第2步发生在第二位。
所有以“-”开头的步骤都在步骤2之后进行。
step -mb在step -ma之后发生
步骤-2a发生在步骤-2bi和-2bii之前
您无法预测步骤-2bi或步骤-2bii是否会发生。 这取决于线程的执行顺序。
如果将循环从5更改为5000000,则步骤-2bi比步骤-2bii更有可能发生
当您运行程序时,将创建两个线程,一个是运行主方法的主线程,另一个是TryCatchReturn类型的“ t”线程。
当您在main()方法内部调用start()方法时,mainThread和t线程都会按照自己的步调开始和结束。 有时mainThread可能先完成,有时t线程可能完成执行。
如果您想先完成t线程,则必须告诉主线程等待t线程的执行。 这是使用join()方法完成的。
您还可以通过调用sleep()方法使主线程将其执行保持一段时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.