【发布时间】:2015-09-14 14:54:05
【问题描述】:
我尝试运行书中的示例(Paul Hyde,Java 线程编程)。它说线程的顺序将互换。但我总是得到:10 个“主线程”打印和 10 个“新线程”打印。 更有趣的是:如果我将使用 tt.run 而不是 tt.start,那么结果将反之亦然。也许这本书很老而且示例基于 JDK 1.2 的原因???代码如下:
public class TwoThread extends Thread
{
public void run()
{
for (int i = 0; i < 10; i++)
{
System.out.println("New thread");
}
}
public static void main(String[] args)
{
TwoThread tt = new TwoThread();
tt.start();
for (int i = 0; i < 10; i++)
{
System.out.println("Main thread");
}
}
}
【问题讨论】:
-
如果你使用
tt.run();,你只有一个线程(它会首先打印“新线程”,因为你首先调用了那个方法)。是start();调用创建并启动了一个实际的新执行线程。 -
尝试循环到 1000 就知道了。
-
是的,如果循环更多次,它就可以工作。
-
你不应该对线程执行顺序做出假设。这就是存在同步原语的原因。
标签: java multithreading