【发布时间】:2014-05-06 02:27:46
【问题描述】:
class JoinDemo extends Thread {
JoinDemo(String nm) {
setName(nm);
start();
}
public void run() {
for (int i = 1; i <= 5; i++) {
try {
Thread.sleep(100);
} catch (Exception e) {
System.out.println(e);
}
System.out.println(i);
}
System.out.println(getName() + " exiting.");
}
public static void main(String args[]) {
JoinDemo t1 = new JoinDemo("One");
JoinDemo t2 = new JoinDemo("Two");
JoinDemo t3 = new JoinDemo("Three");
try {
t1.join();
} catch (Exception e) {
System.out.println(e);
}
System.out.println("Main Thread Exits now.");
}
}
得到的输出是:
1
1
1
2
2
2
3
3
3
4
4
4
5
5
Three exiting.
One exiting.
5
Main Thread Exiting
Two exiting.
我在浏览了各个网站了解Join()的概念后编写了上面的程序。但我仍然无法得到它。我面临的问题是我使用了 t1.join()。所以线程一应该在三个之前退出,但是这里线程三在一个之前退出。每次我运行程序时,输出都是不同的。有时是两个在一个之前退出,或者三个在一个之前退出。不应该在任何其他线程之前线程一个退出?由于 t1.join() 等待线程一在三和一之前终止??
【问题讨论】:
-
寻求帮助时要做的第一件事是确保您的代码的格式和缩进可读。这次我已经为你做了。
-
可能 t1 在到达 t1.join() 时已经完成。要获得效果可能会更改为 Thread.sleep(2000)。
-
stackoverflow.com/questions/18479771/… 这里问的几乎完全相同的问题,答案很好。
-
您的代码中没有任何内容可以确保
thread one should exit before three线程一和三三之间有什么关系?实际上并不能保证线程一会在三三结束之前真正开始。