我正在一个新线程中编写一个简单的算法。 我想知道为什么后面的代码等待线程完成才能运行。 这是一个简单的程序,也是如此。
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
答案 0 :(得分:7)
由于您只是直接调用run
方法,因此您不会产生线程。您需要改为调用start
方法。
当您调用start
方法时,JVM会生成一个新线程并调用run
对象的Runnable
方法。直接调用run
方法类似于调用任何其他常规方法,没有新线程。