【发布时间】:2015-08-18 19:50:18
【问题描述】:
我阅读了一些教程,甚至已经问过问题here
但我再次对加入方法感到困惑。 我所知道的Java在正常情况下不能保证线程的执行顺序。
我使用 join() 读取的内容,它确保一旦线程调用 join,当前线程将不会执行,除非你调用 join 的线程完成。
我尝试过的例子
public class ThreadTest1 extends Thread{
@Override
public void run() {
super.run();
for(int i=0; i<10; i++)
{
System.out.println(i + " :"+ Thread.currentThread().getName());
}
}
public static void main(String[] args) {
System.out.println("Thread is getting started");
ThreadTest1 th0= new ThreadTest1();
th0.start();
ThreadTest1 th1= new ThreadTest1();
th1.start();
try {
th1.join(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出:
First time output
0 :Thread-1
1 :Thread-1
2 :Thread-1
0 :Thread-0
3 :Thread-1
1 :Thread-0
4 :Thread-1
2 :Thread-0
5 :Thread-1
3 :Thread-0
6 :Thread-1
4 :Thread-0
7 :Thread-1
8 :Thread-1
9 :Thread-1
5 :Thread-0
6 :Thread-0
7 :Thread-0
8 :Thread-0
9 :Thread-0
Second time output:
0 :Thread-1
0 :Thread-0
1 :Thread-1
1 :Thread-0
2 :Thread-1
2 :Thread-0
3 :Thread-1
3 :Thread-0
4 :Thread-1
4 :Thread-0
5 :Thread-1
5 :Thread-0
6 :Thread-1
6 :Thread-0
7 :Thread-1
7 :Thread-0
8 :Thread-1
8 :Thread-0
9 :Thread-1
9 :Thread-0
为什么两个输出不同。
我将 join() 与 th1 对象一起使用。当th0正在运行并且jvm找到th1线程所以线程1应该先完成然后线程0。
为什么它打印 Thread-1, Thread-0 没有任何序列。如果输出会是这样,那么 join() 方法有什么用?
谁能解释一下我的输出。
【问题讨论】:
-
th2.start();应该是th1.start();,对吗? th/th0 也是一样。
标签: java multithreading join