繁体   English   中英

为什么“主要方法” println首先印刷

[英]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方法的下一行代码不会等待您的线程完成。

如注释中所述,不能保证线程的执行顺序,因为在调用start()方法时, maint线程同时运行。 run()方法在同一线程上运行时,将在末尾打印“ main方法”。 已经运行了程序,调试时得到以下输出。

线程输出

我也在第一个实例上获得了您的输出(没有调试),它传达的顺序是不确定的... :)

希望这可以帮助!

如果线程未处于睡眠或等待状态,则调用interrupt()方法将执行正常行为,并且不会中断线程,而是将中断标志设置为true。

正如Yunes所提到的,主线程和新线程都共存并一起运行。

也看看这个

欢迎使用多线程。

这是正在发生的事情:

  1. 首先,您有一个线程(正在执行main方法的线程)。
  2. 您创建第二个线程(在main方法中)。
    -ma主线程继续执行并调用中断方法。
    -mb主线程继续执行并调用System.out.println方法。
    -2a新线程开始执行并调用System.out.println方法。
    -2bi新线程被中断并调用System.out.println方法。
    -2bii新线程继续执行并退出for循环。

唯一保证的执行顺序如下:

步骤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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM