2009年2月26日 星期四

第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}
答案:AD
參考:8-5-4 匿名內部類別、13-2 Java執行緒與Thread類別、13-3 Runnable介面

---------------------------------------

以題意來看同依時間只能有一個執行續執行.
A. 在原處的話,同時間有5條執行緒.
D. 在foo() 裡面使用 synchronize 區塊,這樣同時間就只能有一條執行緒.

沒有留言:

張貼留言