两个线程同时在给定程序中执行,但此代码每次都给出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;
}
}
}
答案 0 :(得分:0)
TLDR :
t.join();
解释:
启动ThreadB时,线程可能无法立即启动。由调度程序决定,哪个线程在哪个时间执行。此外,ThreadA不会等待ThreadB完成其执行。所以会发生什么(可能,因为调度程序可以在每次执行中做出不同的决定):
你想要的是:
您可以使用您想要等待的线程的join
方法来实现:
public static void main(String[] agrs) {
ThreadB t = new ThreadB();
t.start();
t.join(); // Wait for ThreadB
System.out.println(t.count);
}