以下是来自SCJP转储的问题:
public class Threads1 {
int x=0;
public class Runner implements Runnable{
public void run(){
int current=0;
for (int i=0; i<4; i++){
current = x;
System.out.print(current + ',');
x=current +2;
}
}
}
public static void main(String[] args){
new Threads1().go();
}
public void go(){
Runnable r1 = new Runner();
new Thread(r1).start();
new Thread(r1).start();
}
}
可能的结果是什么?
一个。 0,2,4,4,6,8,10,6,
B中。 0,2,4,6,8,10,2,4,
℃。 0,2,4,6,8,10,12,14,
d。 0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14,
电子。 0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,
在转储中它说答案是A和C.但是,我不知道答案A是如何可能的,因为最后一个输出(6)小于之前的输出。
答案 0 :(得分:0)
A - 如果一个线程打印0,2,则可能两个都获得4到当前并且将6个保存到x(两个),然后两个都获得6到当前,第二个到达结束 - 打印6,8,10,之后首先打印6。
答案 1 :(得分:0)
由于有两个线程同时运行...
It might result in the following at every iteration you are adding +2
thread 1- 0 2 4 6 8 10
thread 2- 4 6