java - 为什么在执行下一行之前完成了线程执行

时间:2014-08-02 10:51:59

标签: java multithreading

我正在一个新线程中编写一个简单的算法。 我想知道为什么后面的代码等待线程完成才能运行。 这是一个简单的程序,也是如此。

public static void main(String[] args) {
    final String[] strings = new String[10];

    new Thread(new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                strings[i] = String.valueOf(i);
                Thread.sleep(10000); // in real code this is wrapped in a simple try catch
            }
        }
    }).run();

    for (String string : strings) {
        System.out.print(string);
    }
}

线程休眠10秒,然后在线程完成运行后执行最后一次迭代 我甚至可以延长睡眠时间。但是直到线程结束才会执行下一行(最后的迭代) 这是为什么?

结果是 0 1 2 3 4 5 6 7 8 9

1 个答案:

答案 0 :(得分:7)

由于您只是直接调用run方法,因此您不会产生线程。您需要改为调用start方法。

当您调用start方法时,JVM会生成一个新线程并调用run对象的Runnable方法。直接调用run方法类似于调用任何其他常规方法,没有新线程。