자격증/OCJP_ExamB

QUESTION 16

IT grow. 2018. 7. 9. 20:45
반응형

QUESTION 16 


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 } 



Solution : AD




plus imformation 


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();

         }

 } 




반응형