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();
}
}
'자격증 > OCJP_ExamB' 카테고리의 다른 글
QUESTION 18 (0) | 2018.07.09 |
---|---|
QUESTION 17 (0) | 2018.07.09 |
QUESTION 15 (0) | 2018.07.09 |
QUESTION 14 (0) | 2018.07.09 |
QUESTION 13 (0) | 2018.07.09 |
#IT #먹방 #전자기기 #일상
#개발 #일상