public class Tst11 implements Runnable { private int x; private int y; /** * @param args */ public static void main(String[] args) { Tst11 t = new Tst11(); new Thread(t).start(); new Thread(t).start(); } public void run() { for (;;) { x++; y++; System.out.println("x=" + x + ",y=" + y); } } }以上代碼的運行結果是?
A 編譯不通過
B 輸出行類似 x=1,y=1 , 總是重復一次。
C 輸出行類似 x=1,y=1 , 遞增,每行不重復。
D 輸出行類似 x=38773,y=38984 , x和y的值不一定相等
答案:D
分析:本地考察對 多線程的概念理解。 Java 中的多線程,指的是對 Java 的同一對象的同一代碼段,有兩個線程在競逐執行。
代碼11行、12行,創建了兩個線程。
由於是兩個線程 搶占式、發式地執行,故每個線程在執行 run 中的代碼時,很可能中途中斷執行,讓出CPU給另一個線程。所以導致 x 和 y 的值不能同步增加。