以下是我的以下代码:
private int counter = 0;
public void incC() {
counter++;
System.out.println("Counter is: "+counter + " "+Thread.currentThread().getName());
}
public void printC() {
System.out.println("Counter is: "+counter + " "+Thread.currentThread().getName());
}
public static void main(String args[]) throws Exception {
Stuff stuff = new Stuff();
Thread t1 = new Thread(() -> {
stuff.incC();
});
Thread t2 = new Thread(() -> {
stuff.printC();
});
t1.start();
t2.start();
t1.join();
t2.join();
}
}
这是我的输出:
Counter is: 1 Thread-1
Counter is: 1 Thread-0
t1.join()
。那么线程t2
应该等待线程t1
死掉吗? t2
如何在t1
之前输出?答案 0 :(得分:3)
t1.join()
使当前线程等待线程t1
死亡。它对任何其他线程的时序没有影响,但对当前线程没有影响。您已经启动了两个线程,它们将同时运行,没有排序约束。
我还应该注意,启动两个线程只让一个人等待对方的死亡就会失去多线程的目的。
答案 1 :(得分:0)
join()
强制等待t1
的当前(在您的情况下是主要的)线程死亡,因此t2
继续工作答案 2 :(得分:0)
两个线程并行工作,因此无法保证在您的情况下首先完成哪个线程。
如果你想首先完成一个特定的线程,你必须启动它并与主线程连接,然后启动并加入第二个线程,如下所示。
t1.start();
t1.join();
t2.start();
t2.join();
设置线程的名称以便更好地理解。
同时更改您的问题,因为您的主题正常运行。