2015-12-11 59 views
-3

當我運行下面的代碼時,它返回的是後面的9號但我認爲它應該是10否,因爲start()將執行運行段,不,不是嗎?請幫忙解釋一下。謝謝!爲什麼這個程序涉及線程首先返回「是」

class myThread implements Runnable{ 

String mystring = "Yes "; 

public void run() { 

this.mystring = "No "; 

} 

public static void main (String args[]) { 

myThread t = new myThread(); 
new Thread(t).start(); 

for (int i=0; i<10; i++){ 

    System.out.println(t.mystring); 
} 

} 

} 
+0

你開始線程,但你不知道它在什麼時候被執行。有時你會得到10分,其他時間可以得到2分是或更多。 – Gonzalo

+1

這裏根本沒有線程安全性;你的結果將完全未定義。我相信,不能保證'不'會出現,因爲你的字符串引用不是'volatile'。 –

回答

0

線程用於並行執行。這意味着線程的代碼平行於main-方法之一。但是不能保證執行的順序。這正是你在這裏體驗到的。 main中的代碼比Thread的啓動稍快,因此第一個輸出爲「是」。