Java 執行緒核心概念總結。本站提醒廣大學習愛好者:此文章僅供參考,不一定能完全符合您的需求。以下是完整總結正文
本文實例總結了 Java 中執行緒用法。分享給大家供參考。詳細分析如下:
- 執行緒是基本調度單位。共享程序的資源,如記憶體和檔案控制代碼。但有自己的 pc(程式計數器)、stack(執行緒堆疊)及區域變數。
- 執行緒的優勢:
a) 充分利用多處理器
b) 可簡化模型。特定任務給特定執行緒,如 servlets 及 rmi 等框架。
c) 對非同步事件的簡單處理。如 socket,nio 使用更複雜。而現代作業系統支援更大數量的執行緒。
d) 介面的更好回應
- 外部鎖:synchronized 區塊。互斥。可重入,這樣的設計可以避免死鎖。
- 記憶體可見性:由於編譯器優化,執行緒並不像你看到的一樣。範例展示 NoVisibility 類別可能印出 0 或無限迴圈。
- volatile:可解決記憶體可見性,比 synchronized 效能更好,但僅此而已,如無法保證 a++ 的原子性。
- 逸出:不要在建構函式中讓 this 參考逸出。不要讓內部變數逸出。
- 執行緒封閉:將物件封閉在一個執行緒中,無論物件是否執行緒安全,都能保證執行緒安全。
a) 堆疊封閉。即只有區域變數能訪問該物件。
b) ThreadLocal。
- 不可變物件。一定是執行緒安全的。需滿足:狀態不可修改、所有欄位皆為 final、正確建構物件無 this 逸出。
- 安全發佈:
a) 透過 static 初始化物件
b) 使用 volatile 或 AtomicReference
c) 將參考儲存於正確建構物件的 final 欄位
d) 使用鎖
希望本文所述對大家的 Java 程式設計有所幫助。