SCJP 1.6版考題 225
出自 陳富國維基館
於 2013年3月29日 (五) 23:53 由 Ikk (對話 | 貢獻) 所做的修訂 (新頁面: 檔案:SCJP225-1 2.png Given: 8. Runnable r = new Runnable() { 9. public void run() { 10. try { 11. Thread.sleep(1000); 12. } catch(Inte...)
Given: 8. Runnable r = new Runnable() { 9. public void run() { 10. try { 11. Thread.sleep(1000); 12. } catch(InterruptedException e) { 13. System.out.println(“interrupted”); 14. } 15. System.out.println(“ran”); 16. } 17. }; 18. 19. Thread t = new Thread(r); 20. t.start(); 21. System.out.println(“started”); 22. try { 23. t.sleep(2000); 24. } 25. catch(Exception e) {} 26. System.out.println(“interrupting”); 27. t.interrupt(); 28. System.out.println(“ended”); Assume that sleep(n) executes in exactly n milliseconds. and all other code executes in an insignificant amount of time. Place the fragments in the output area to show the result of running this code.
解答
解說:
題目問設sleep(n)n毫秒內執行完閉,所有其他的程式碼在少量的時間內執行完閉,輸出應該是什麼? 上面的程式完整的寫法如下: class threadTest{ public static void main(String[] args){ Runnable r = new Runnable(){ public void run(){ try{ Thread.sleep(1000); }catch(InterruptedException e){ System.out.println("interrupted"); } System.out.println("ran"); } }; Thread t = new Thread(r); try{ t.start(); } catch (Exceotion e){ System.out.println("started"); } t.sleep(2000); System.out.println("interrupting"); t.interrupt(); System.out.println("ended"); } } t執行緒被啟動後,執行1秒的睡眠,main執行緒執行2秒的睡眠(t.sleep(2000)),基本上t執行緒會先離開睡眠,而執行印出ran 之後main離開睡眠狀態,印出interrupting 再發出一個interrupt(因為t已經離開睡眠狀態,這個interrupt不會造成t的睡眠狀態中斷,而印出interrupted。 main印出ended… Sleep是Thread的靜態方法不是物件方法,使用方法應為Thread.Sleep(n),第23行行t.sleep(1000)等同於Thread.Sleep(1000)。
|