Which two changes, taken together, would guarantee the output: 1, 2, 3, 4, 5, ? (Choose two.)

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. } }
15. }

Which two changes, taken together, would guarantee the output: 1, 2, 3, 4, 5, ? (Choose two.)

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. } }
15. }

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 }

Explanation:
public class TestFive {
private int x;
public void foo() {
synchronized(this) {
int current = x;
x = current + 1;
System.out.print(x + “, “);
}
}
public void go() {
for(int i = 0; i < 5; i++) {
new Thread() {
public void run() {
foo();
} }.start();
} }
}



Leave a Reply 0

Your email address will not be published. Required fields are marked *