好吧人們..我又回來了(最近似乎是我的家)。Java:超過10,000次迭代的線程連接不一致
我正在瀏覽多線程編程YouTube vids的整個洞穴。這個特定的使用2個線程,通過一個for循環,每個變量加1個變量10,000次。所以你加入他們,所以結果是20,000完成。
public class main {
private int count = 0;
public static void main(String[] args) {
main main = new main();
main.doWork();
}
public void doWork(){
Thread t1 = new Thread(new Runnable(){
public void run(){
for (int i = 0; i < 10000; i++){
count++;
}
}
});
Thread t2 = new Thread(new Runnable(){
public void run(){
for (int i = 0; i < 10000; i++){
count++;
}
}
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException ex) {
Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Count is: " + count);
}
}
事情是..當我改變迭代:
我< 10 = 20(正確的)
我< 100 = 200(正確)
我< 1000 = 2000 (正確)
i < 10000 = 13034(首次運行)
= 14516(第二輪)
= ...等等。
爲什麼不是妥善處理數以萬計的迭代?
答案很明顯:您有共享的不可同步的可變數據。 – duffymo
哦,我的天啊......我需要去睡覺......那是一個可怕的問題 – Podis