两个线程在给定程序中同时执行,但是此代码每次给出0输出。为什么不更新计数值?
class ThreadA {
public static void main(String[] agrs) {
ThreadB t = new ThreadB();
t.start();
System.out.println(t.count);
}
}
class ThreadB extends Thread {
int count = 0;
public void run() {
for(int i = 0; i < 10; i++) {
count = count + i;
}
}
}
最佳答案
TLDR:
t.join();
说明:
当您启动ThreadB时,线程可能不会立即启动。由调度程序决定在哪个时间执行哪个线程。此外,ThreadA不会等待ThreadB完成执行。因此,发生了什么事(适当地,因为调度程序可以在每次执行中做出不同的决定):
ThreadA运行
创建线程B
ThreadA打印计数
(如果程序不会在此处终止:则执行ThreadB)
您想要的是:
ThreadA运行
创建线程B
ThreadA等到ThreadB完成
ThreadB进行计算
ThreadB完成
ThreadA打印计数
您可以通过使用要等待的线程的
join
方法来实现:public static void main(String[] agrs) {
ThreadB t = new ThreadB();
t.start();
t.join(); // Wait for ThreadB
System.out.println(t.count);
}