SCJP 1.6版考題 223

出自 陳富國維基館
於 2013年3月27日 (三) 16:40 由 Ikk (對話 | 貢獻) 所做的修訂 (新頁面: Given: <br> <br>11.   class PingPong2{ <br>12.            synchronized void hit(long n){ <br>13.               &...)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
前往: 導覽搜尋

Given:

11.   class PingPong2{
12.            synchronized void hit(long n){
13.                     for(int i=1; i<3; i++)
14.                     System.out.print(n + "-" + i + " ");
15.              }
16.   }
17.  public dass Tester implements Runnable{
18.                static PingPong2 pp2 = new PingPong2();
19.                public static void main(String[] args){
20.                            new Thread(new Tester()).start();
21.                            new Thread(new Tester()).start();
22.                 }
23.               public void run(){pp2.hit(Thread.currentThread.getId());}
24.   }



Which statement is true?
  A. The output could be 5-1 6-1 6-2 5-2
  B. The output could be 6-1 6-2 5-1 5-2
  C. The output could be 6-1 5-2 6-2 5-1
  D. The output could be 6-1 6-2 5-1 7-1


解答


Ans: B

解說:  第23行run方法是二條執行會執行的程式碼,
          run呼叫hit同步的方法印出"執行緒的id-i",同步的方法同一時間只有一個執行緒可進入,所以絕不會產生交互執行的現象,
          一定是一條執行緒跑完hit方法(印完xx-1和xx-2),才換另一個執行。