我試圖讓一個小程序來演示同步,但無論出於何種原因,這並不符合我的期望。重點是製作1000個線程,並讓它們全部爲靜態Integer對象「sum」加1。輸出應該是1000,但我得到不同的輸出。這就像addSum()方法根本不同步。我試過拖延println,認爲它打印速度太快,但這不是問題。 我在這裏錯過了什麼?Java同步不起作用
public class sumsync implements Runnable {
public static Integer sum = new Integer(0);
public sumsync(){
}
private synchronized void addSum(int i){
sum += i;
}
@Override
public void run() {
addSum(1);
}
}
主要類:
public class sumsyncinit {
private static final int max_threads = 1000;
public static void main(String[] args) {
sumsync task = new sumsync();
Thread thread;
for(int i=0; i<max_threads;i++){
thread = new Thread(task);
thread.start();
}
System.out.println(sumsync.sum);
}
}
來自OP:_我曾嘗試延遲println,認爲它打印速度太快,但這不是問題。_ – bsiamionau 2013-03-10 14:34:34
但是,並不保證所有線程都已執行。 – Stephan 2013-03-10 14:36:02
我試圖在sysout之前添加Thread.sleep(1000),它工作。 OP是不正確的。 +1 – bsiamionau 2013-03-10 14:37:43