本章內容較為基礎,主要介紹 Java AWT 與 Swing 的基本用法,此處略過詳細代碼示例,重點在於理解事件驅動模型與組件層次結構。
Java 提供兩種創建線程的方式:繼承 Thread 類或實現 Runnable 接口。繼承 Thread 最為直接,只需覆寫 run() 方法即可定義線程執行體。但實際啟動線程必須調用 start() 而非直接調用 run(),否則不會產生新的執行緒。
start()。start(),等待 CPU 時間片,可能正在運行也可能在就緒隊列中。sleep()、wait()、I/O 操作、同步鎖等待而暫時無法運行。run() 方法正常返回或拋出未捕獲異常結束。不建議使用已棄用的 stop()、suspend()、destroy()。多線程環境下,多個線程同時訪問有限資源(如銀行賬戶、打印機)會導致數據競爭。Java 通過 synchronized 關鍵字提供內置鎖機制:每個對象擁有一把鎖,synchronized 方法或代碼塊要求線程先獲取鎖才能執行,確保同一時刻只有一個線程訪問共享資源。此外,volatile 關鍵字可保證長整型與雙精度型變量的讀寫原子性,並禁止指令重排序優化。
wait() 釋放對象鎖並讓線程進入等待集,直到其他線程調用同一對象的 notify() 或 notifyAll() 喚醒。這組方法定義在 Object 中,必須在同步上下文中調用,否則拋出 IllegalMonitorStateException。管道流(PipedInputStream/OutputStream)也可實現線程間數據傳輸,適用於生產者-消費者模型。
依據《Design Patterns》一書,23 種模式按變化維度分為三類:
本章重點示範 Observer(觀察者)與 Visitor(訪問者)模式的應用場景。
歷經三個多月研讀,雖有收穫,但缺乏實戰演練。下一步應轉向實際項目開發,將理論轉化為代碼能力。