掌握「何時使用多執行緒、何時避免」是關鍵課題。主要目的是對大量任務進行有序管理。透過多任務混合運用,能更有效利用電腦資源,或對使用者顯得更方便。經典資源均衡問題:IO 等待期間如何利用 CPU。使用者便利性經典問題:長時間下載過程中如何監視並靈敏反應「停止」按鈕。
執行緒用「輕度」執行切換(~100 指令)取代「重度」進程場景切換(~1000 指令)。進程內所有執行緒共享相同記憶體空間,「輕度」切換只改變程式執行點與區域變數;「重度」切換需完整交換記憶體空間。
執行緒處理似進入全新領域,要求改換傳統編程思維。但大多數微機作業系統支援執行緒,程式語言/庫出現執行緒擴展。一旦掌握執行緒概念,其他環境不會太困難。雖執行緒支援增加 Java 複雜度,但請勿怪 Java——利用執行緒能做許多有益的事。
多執行緒可能共享同一資源(如物件記憶體),是運用執行緒面臨的最大麻煩。必須保證多執行緒不會同時讀寫該資源。這要求技巧性運用 synchronized 關鍵字。它是有用工具,但必須真正掌握,因操作不當極易出現死結。
Java 允許理論上建立任意數量執行緒,但實務上必須控制上限。大量執行緒會讓場面一團糟,工作幾近停頓。臨界點不像物件可達數千,**通常在 100 以下**。一般只建立少數關鍵執行緒解決特定問題,此時數量限制不大;但較常規設計中確會感到束手束腳。
因採用執行緒「調度」機制,在 run() 主迴圈插入 sleep() 呼叫,通常能讓程式跑得更快。這對編程技巧要求極高——特別是較長延遲反而能提升效能時。原因:正在運行的執行緒準備進入「休眠」前,較短延遲可能導致「sleep 結束」調度機制中斷,強迫調度器中止並稍後重啟。必須多思考才能意識到真正麻煩程度。
本章遺漏動畫範例(小程式最流行應用)。Java JDK 提供完整方案(可播放聲音),可至 java.sun.com 示範區下載。未來 Java 版本將提供更好動畫支援。系統學習 Java 動畫原理可參考《Core Java》(Cornell & Horstmann, 1997)。深入了解執行緒處理可參考:《Concurrent Programming in Java》(Doug Lea, 1997)、《Java Threads》(Oaks & Wong, 1997)。