run() 方法。run(),再傳給 Thread 建構子。推薦,避免單繼承限制,利於資源共享。Thread 子類直接 new。Runnable 需用 new Thread(runnable) 或其它建構子。start(),而非 run()。start() 會建立新呼叫堆疊,將執行緒從 NEW 轉為 RUNNABLE;直接呼叫 run() 只是在當前執行緒執行普通方法。Runnable 版:輸出順序交錯(李四:0, 阿三:0, 李四:1...),模擬耗時操作的 for(long k=0; k<100000000; k++); 讓 CPU 切換更明顯。
Thread 繼承版:輸出同樣不確定。
核心結論:執行緒啟動順序 ≠ 執行順序。調度器不保證次序與時間片,只能保證每個執行緒最終會跑完。
main,子執行緒名稱預設為 Thread-N,可自訂。Thread.currentThread() 取得當前執行緒物件。IllegalThreadStateException)。sleep()、yield()、join()、優先權、Lock/Condition 影響調度行為。| # | 題目 | 核心答案 |
|---|---|---|
| 1 | Static Nested Class vs Inner Class | 靜態內部類不依賴外部實例;普通內部類需外部實例化後才能建立。 |
| 2 | String 能否被繼承 | final 類,不可繼承。建議用 StringBuilder。 |
| 3 | int vs Integer | 基本類型 vs 包裝類;語義、儲存結構、預設值(null vs 0)皆不同。 |
| 4 | String vs StringBuffer | 不可變 vs 可變;動態構建字串用 StringBuffer/Builder。 |
| 5 | RuntimeException vs Checked Exception | 編譯器強制處理 checked;runtime 為常見邏輯錯誤,不強制。 |
| 6 | Servlet 生命週期 vs CGI | init→service→destroy;Servlet 多執行緒單實例,CGI 每請求一進程。 |
| 7 | ArrayList/Vector/LinkedList | 前兩者陣列結構(查快增刪慢),Vector 同步較慢;LinkedList 雙向鏈表(增刪快查慢)。 |
| 8 | EJB 技術基礎與 Bean 區別 | 基於 JNDI/RMI/JTA;Session 做業務、Entity 做持久化;Stateful 有狀態、Stateless 無狀態。 |
| 9 | Collection vs Collections | 介面 vs 工具類(靜態方法:排序、搜尋、同步包裝)。 |
| 10 | & vs && | 位運算 vs 邏輯運算(短路)。 |
| 11 | HashMap vs Hashtable | HashMap 非同步、允許 null、效率高;Hashtable 同步、不允許 null、繼承 Dictionary。 |
| 12 | final/finally/finalize | 修飾符/異常塊/GC 回收前呼叫。 |
| 13 | sleep() vs wait() | Thread 方法不釋放鎖 / Object 方法釋放鎖進入等待池,需 notify 喚醒。 |
| 14 | Overload vs Override | 同類多態 vs 父子類多態;Overload 可改變返回型別。 |
| 15 | Error vs Exception | Error 為嚴重系統錯誤(OOM),難恢復;Exception 為設計/實作問題,可處理。 |
| 16 | 同步 vs 異步 | 共享資料需同步;耗時操作不想阻塞用異步。 |
| 17 | abstract class vs interface | 抽象類可有實作/構造器/非靜態欄位;介面全抽象、多實作、static final 常量。 |
| 18 | Heap vs Stack | 堆存物件、棧存引用與基本類型區域變數;棧後進先出、堆非線性。 |
| 19 | forward vs redirect | forward 伺服器端跳轉、地址欄不變、共享 request;redirect 客戶端重新請求、地址欄變化。 |
| 20 | EJB vs JavaBean | JavaBean 本地元件(無參建構子、可序列化);EJB 分散式元件(RMI、容器管理、遠端存取)。 |