練習題清單
- 繼承 Thread 並覆寫 run(): 在 run() 列印訊息、呼叫 sleep(),重複三次後返回。建構子放啟動訊息,覆寫 finalize() 列印關閉訊息。建立獨立執行緒類在 run() 呼叫
System.gc() 和 System.runFinalization() 並列印成功訊息。建立兩類型多個執行緒運行觀察。
- 修改 Counter2.java: 使執行緒成為內部類,不需明確保存 Counter2 參考。
- 修改 Sharing2.java: 在 TwoCounter 的 run() 內部添加
synchronized 區塊,而非同步整個 run() 方法。
- 建立兩個 Thread 子類: 第一個 run() 啟動並取得第二個 Thread 參考,呼叫
wait()。第二個類 run() 幾秒後為第一個執行緒呼叫 notifyAll(),使第一個執行緒列印訊息。
- Counter5.java 中的 Ticker2: 移除
yield() 並解釋結果。用 sleep() 取代 yield() 再解釋結果。
- ThreadGroup1.java: 將
sys.suspend() 換成執行緒組 wait(2000)。須在同步區塊取得 sys 物件鎖以確保正確結果。
- 修改 Daemons.java: 使 main() 用
sleep() 而非 readLine()。實驗不同睡眠時間觀察現象。
- GreenhouseControls.java(第 7 章): 修改 Event 使其成為執行緒,調整其餘設計與新的執行緒基礎 Event 協作。
這些練習涵蓋執行緒建立、同步、等待/通知、執行緒組、Daemon 執行緒、排程與框架整合等核心主題,是掌握 Java 多執行緒程式設計的絕佳實戰演練。