在下面的代码中,预测的输出是什么?

public class Threads2 implements Runnable {
    public void run()
    {
        System.out.println("run.");
        throw new RuntimeException("Problem");
    }

    public static void main(String[] args)
    {
        Thread t = new Thread(new Threads2());
        t.start();
        System.out.println("End of method.");
    }
}

给出的可能结果是:
End of method.
run.
java.lang.RuntimeException: Problem

或者
run.
java.lang.RuntimeException: Problem
End of method.

据我说,只有答案2是可能的,请帮助我理解。

最佳答案

执行将产生两个线程,一个是主线程(一个运行主方法),另一个是在main方法中创建的线程。由于就线程的运行顺序而言,您不能保证任何事情,因此代码可以运行多个顺序。

因此,让我们调用主线程Thread1和创建的线程Thread2。然后,在启动Thread2之后,就可以进行以下操作:

  • Thread1首先获取处理器时间。 (首先打印“方法结束...”)
  • Thread2首先获取处理器时间。 (“运行”先打印)

  • 而且,实际上存在第三种可能性(我认为):
  • Thread2获取处理器时间并显示“运行”。
  • Thread2被中断,并且Thread1接管。
  • Thread1打印“End of ...”
  • Thread2引发异常。
  • 关于java - 在调用旁边的语句执行之后,是否可以打印方法调用输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13776970/

    10-13 08:17