2015-10-15 90 views
-2

我希望編譯器爲每個線程運行循環1000次,但輸出是12 12 12 12.爲什麼會發生這種情況?這個循環爲什麼不執行1000次?

public class Runy implements Runnable { 
    int x, y; 

    public void run() { 
     for (int i = 0; i < 1000; i++) 
      synchronized (this) { 
       x = 12; 
       y = 12; 
      } 
     System.out.print(x + " " + y + " "); 
    } 

    public static void main(String args[]) { 
     Runy run = new Runy(); 
     Thread t1 = new Thread(run); 
     Thread t2 = new Thread(run); 
     t1.start(); 
     t2.start(); 
    } 
} 
+9

檢查你的循環'的for(int i = 0;我<1000;我++)'< - 缺少了什麼的在這裏結束 – MadProgrammer

+2

Ayyyyyyyyyyy!我剛纔看到@MadProgrammer指的是什麼。 –

+2

提示:代碼完全按照您對它的說明 – MadProgrammer

回答

7

問題是與你的for-loop ...

for (int i = 0; i < 1000; i++) 
    synchronized (this) { 
     x = 12; 
     y = 12; 
    } 
System.out.print(x + " " + y + " "); 

這是一樣的

for (int i = 0; i < 1000; i++) { 
    synchronized (this) { 
     x = 12; 
     y = 12; 
    } 
} 
System.out.print(x + " " + y + " "); 

現在應該突出問題。本質上,如果沒有{...}塊,則循環僅執行synchornized塊,一次執行1000次。

喜歡的東西...

for (int i = 0; i < 1000; i++) { 
    synchronized (this) { 
     x = 12; 
     y = 12; 
    } 
    System.out.print(x + " " + y + " "); 
} 

應爲您提供4000 12

+0

即使問題的原始版本的'System.out.print'縮進與'for'循環相同,那麼爲什麼你認爲它的目的是在循環內?這個問題實際上並沒有說這就是這個意圖。 – Andreas

+1

@Andreas因爲不然,爲什麼要問這個問題? OP想知道它爲什麼「只打印」12 12 12 12,這使我相信他們希望打印語句在循環內執行1000次 – MadProgrammer

+0

@Andreas看到後,我不在乎要記住有多少問題,關於爲什麼'if'和'loop'因爲缺少'{...}而無法按預期工作,你只是假設 – MadProgrammer