實戰Java多執行緒程式設計之不提倡的方法

2021-04-12 23:15:12 字數 1550 閱讀 5289

死鎖可能是多執行緒程式最常見的問題。當乙個執行緒需要乙個資源而另乙個執行緒持有該資源的鎖時,就會發生死鎖。這種情況通常很難檢測。但是,解決方案卻相當好:在所有的執行緒中按相同的次序獲取所有資源鎖。例如,如果有四個資源 —a、b、c 和 d — 並且乙個執行緒可能要獲取四個資源中任何乙個資源的鎖,則請確保在獲取對 b 的鎖之前首先獲取對 a 的鎖,依此類推。如果「執行緒 1」希望獲取對 b 和 c 的鎖,而「執行緒 2」獲取了 a、c 和 d 的鎖,則這一技術可能導致阻塞,但它永遠不會在這四個鎖上造成死鎖。

活鎖

當乙個執行緒忙於接受新任務以致它永遠沒有機會完成任何任務時,就會發生活鎖。這個執行緒最終將超出緩衝區並導致程式崩潰。試想乙個秘書需要錄入一封信,但她一直在忙於接**,所以這封信永遠不會被錄入。

記憶體損壞

如果明智地使用 synchronized 關鍵字,則完全可以避免記憶體錯誤這種氣死人的問題。

資源耗盡

某些系統資源是有限的,如檔案描述符。多執行緒程式可能耗盡資源,因為每個執行緒都可能希望有乙個這樣的資源。如果執行緒數相當大,或者某個資源的侯選線程數遠遠超過了可用的資源數,則最好使用 資源池。乙個最好的示例是資料庫連線池。只要執行緒需要使用乙個資料庫連線,它就從池中取出乙個,使用以後再將它返回池中。資源池也稱為 資源庫。

除錯大量的執行緒

有時乙個程式因為有大量的執行緒在執行而極難除錯。在這種情況下,下面的這個類可能會派上用場:

以下是引用片段:

Java多執行緒之《守護執行緒》實戰

定義 什麼是守護執行緒?與守護執行緒相對應的就是使用者執行緒,守護執行緒就是守護使用者執行緒,當使用者執行緒全部執行完結束之後,守護執行緒才會跟著結束。也就是守護執行緒必須伴隨著使用者執行緒,如果乙個應用內只存在乙個守護執行緒,沒有使用者執行緒,守護執行緒自然會退出。應用 下面是守護執行緒的乙個簡單...

JAVA多執行緒之 執行緒池

執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...

Java多執行緒之執行緒安全

當多個執行緒訪問某乙個類 物件或方法時 這個類始終都能表現出正確的行為,那麼這個類 物件或方法 就是執行緒安全的。public class mythread extends thread public static void main string args 結果如下 t1正在執行 4 t1正在執行...