簡體   English   中英

如果兩個線程同時執行,為什么我們沒有得到count的更新值?

[英]Why are we not getting updated value of count, if both the threads are executing simultaneously?

兩個線程同時在給定程序中執行,但此代碼每次都給出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運行
  • ThreadB已創建
  • ThreadA打印計數
  • (如果程序不會在此處終止:執行ThreadB)

你想要的是:

  • ThreadA運行
  • ThreadB已創建
  • 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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM