複選題229. 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 2 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}