我是新來的多線程,我寫了這個代碼打印數字1-10000通過同時運行線程增量和打印變量。'同步'真的只是語法糖嗎?
下面是我使用的代碼:
package threadtest;
public class Main{
static int i=0;
static Object lock=new Object();
private static class Incrementer extends Thread{
@Override
public void run(){
while (true){
synchronized(lock){
if (i>=10000)
break;
i++;
System.out.println(i);
}
}
}
}
public static void main(String[] args) {
new Incrementer().start();
new Incrementer().start();
new Incrementer().start();
new Incrementer().start();
new Incrementer().start();
new Incrementer().start();
}
}
這工作 - 我寫了一個測試程序來檢查輸出和印刷數字是爲了準確1-10000。
我的問題是這樣的:我聽說只是語法糖。但是,如果不使用它,我似乎無法取得成功的結果。我錯過了什麼?
它當然不是。你能否引用你聽過的消息來源? – BalusC 2010-06-26 16:52:00
@BalusC:查看接受的答案。我認爲這些消息來源只是將同步*方法*稱爲語法糖 - 我不確定這是否完全正確,但至少與我的想法不矛盾。 @skaffman:對於我所知道的,我本來可以做到沒有'synchronized'這個錯誤:) – Cam 2010-06-26 17:12:24
@incrediman'synchronized'在一個方法上或多或少與將方法的主體放在'synchronized(this) {...}'(或者一個靜態方法'synchronized(MyClass.class){...}')。 (它在檔案文件中的表現有所不同,但這通常不應該讓你擔心。) – 2010-06-26 17:38:15