Question 127
Given:
1. public class TestFive {
2. private int x;
3. public void foo() {
4 int current =
x;
5. x
= current + 1;
6. }
7. public void go() {
8.
for(int i=0;i<5;i++) {
9. new Thread() {
10. public void run() {
11. foo();
12. System.out.print(x + !°, !°)
13. } }.start();
14. }}}
Which two changes, taken together, would guarantee the output: 1, 2,
3, 4, 5, ? (Choose two.)
A. Move the line 12 print statement into the foo() method.
B. Change line 7 to public synchronized void go() {.
C. Change the variable declaration on line 3 to private volatile int x;.
D. Wrap the code inside the foo() method with a synchronized( this )
block.
E. Wrap the for loop code inside the go() method with a synchronized
block synchronized(this) { // for loop code here }.
Answer: AD
为什么要选A而不选B呢,而且我觉得A让结果没怎么变啊
|