public class X implements Runnable {
private int x;
private int y;
public static void main(String [] args) {
X that = new X();
(new Thread( that )).start();
(new Thread( that )).start();
}
public void run() {
for (;;) {
synchronized (this) {
x++;
y++;
}
System.out.println(Thread.currentThread().getName() +
“x = “ + x + “, y = “ + y);
}
}
}
What is the result?()
A. Compilation fails.
B. The program prints pairs of values for x and y that might not always be the same on the same line (for example, “x = 2, y = 1”).
C. The program prints pairs of values for x and y that are always the same on the same line (for example, “x = 1, y = 1”). In addition, each value appears only once (for example, “x = 1, y = 1” followed by “x = 2, y = 2”). The thread name at the start of the line shows that both threads are executing concurrently.
D. The program prints pairs of values for x and y that are always the same on the same line (for example, “x = 1, y = 1”). In addition, each value appears only once (for example, “x = 1, y = 1” followed by “x = 2, y = 2”). The thread name at the start of the line shows that only a single thread is actually executing.