SCJP考试试题解析二十三


我的QQ号:2535279 


www.javaedu.com.cn 

What happens when you try to compile and run the following application? Choose all correct options. 

  1. public class Z { 

  2. public static void main(String[] args) { 

  3. new Z(); 

  4. } 

  5. 

  6. Z() { 

  7. Z alias1 = this; 

  8. Z alias2 = this; 

  9. synchronized(alias1) { 

  10. try { 

  11. alias2.wait(); 

  12. System.out.println(“DONE WAITING”); 

  13. } 

  14. catch (InterruptedException e) { 

  15. System.out.println(“INTERR 

  UPTED”); 

  16. } 

  17. catch (Exception e) { 

  18. System.out.println(“OTHER EXCEPTION”); 

  19. } 

  20. finally { 

  21. System.out.println 

  (“FINALLY”); 

  22. } 

  23. } 

  24. System.out.println(“ALL DONE”); 

  25. } 

  26. } 

  A. The application compiles but doesn't print anything. 

  B. The application compiles and print “DONE WAITING” 

  C. The application compiles and print “FINALLY” 

  D. The application compiles and print “ALL DONE” 

  E. The application compiles and print “INTERRUPTED” 

  解答:A 

  点评:在Java中,每一个对象都有锁。任何时候,该锁都至多由一个线程控制。由于alias1与alias2指向同一对象Z,在执行第11行前,线程拥有对象Z的锁。在执行完第11行以后,该线程释放了对象Z的锁,进入等待池。但此后没有线程调用对象Z的notify()和notifyAll()方法,所以该进程一直处于等待状态,没有输出。