《Java多執行緒程式設計實戰》—— 第10章 Thread Specific Storage(執行緒特有儲存)模式
Thread Specific Storage模式:不共享變數,不使用鎖。
不同執行緒使用統一的訪問接入點可以獲取執行緒特有的例項。
弊端:
- 隱藏了系統結構,隱藏了應用中各個物件之間的關係,從而使應用更加難於理解。
- 鼓勵使用全域性物件。
常見使用場景
- 需要使用非執行緒安全物件,但不希望引入鎖
- 使用執行緒安全物件,但希望避免其使用鎖的開銷和相關問題
- 隱式引數傳遞(但會使系統難於理解)
- 特定於執行緒的單例模式:對於某個類,希望每個執行緒有且僅有該類的一個例項
執行緒池環境下使用該模式可能導致資料錯亂。需要在適當的時間和地方清理執行緒特有物件。——任務特有物件
記憶體洩露:物件永遠無法被垃圾回收導致佔用的JVM記憶體無法被釋放。
偽記憶體洩露:可能會被回收,也可能永遠無法被回收。
在伺服器環境下使用執行緒特有物件模式需要注意記憶體洩露和偽記憶體洩露。(P140有更詳細的論述)伺服器內部維護一個執行緒池處理各個Web應用的請求,Web應用停止後,執行緒池中的各個工作者執行緒仍然存在。
關鍵條件是:Web應用程式的類載入器持有對ThreadLocal例項的可達引用。
ThreadLocal通常使用static final修飾。
相關推薦
《Java多執行緒程式設計實戰》—— 第10章 Thread Specific Storage(執行緒特有儲存)模式
Thread Specific Storage模式:不共享變數,不使用鎖。 不同執行緒使用統一的訪問接入點可以獲取執行緒特有的例項。 弊端: 隱藏了系統結構,隱藏了應用中各個物件之間的關係,從而使應用更加難於理解。 鼓勵使用全域性物件。 常見使用場景
《演算法圖解》第10章 K最近鄰(K nearest neighbors,KNN)演算法
今天看到這裡的案例非常有意思,即以座標軸中的座標來作為引數。計算不同點的距離。實際上就是標記一些使用者的喜好和習慣,不同的維度代表不同的專案,在這個維度上的值可表示喜好程度。電影評分、音樂收藏...總之,很多情況都可以用,很有趣。就是標記了很多使用者,看哪些使
java開發實戰第10章答案
按照要求定義一個操作類:要求完成一個一維陣列操作類,其中可以加入任意型別的資料,陣列具體的操作型別由程式外部決定,並且可以實現查詢功能 package chapter10; class Data<T>{ private T info; publ
java程式設計思想 第 10 章 內部類
將一個類的定義放在另一類的定義內部,這就是內部類 一、 建立內部類 把內部類的定義置於外圍類的裡面: //: innerclasses/Parcel1.java // Creating inner classes. public class Pa
第10章 網絡安全(4)_網絡層安全IPSec
配置ip 分享 發送 eight 管理工具 win2003 soci 程序 插入 5. 網絡層安全IPSec 5.1 IPSec協議 (1)前面使用Outlook進行數字簽名和數字加密是應用層實現的安全。安全套接字實現的安全是在應用層和傳輸層之間插入了一層來實現數據通信安全
【機器學習實戰】第6章 支援向量機(Support Vector Machine / SVM)
第6章 支援向量機 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>
[完]機器學習實戰 第六章 支援向量機(Support Vector Machine)
[參考] 機器學習實戰(Machine Learning in Action) 本章內容 支援向量機(Support Vector Machine)是最好的現成的分類器,“現成”指的是分類器不加修改即可直接使用。基本形式的SVM分類器就可得到低錯
第1章 計算機系統漫遊(深入理解計算機系統)
printf 保存 並運行 用戶 數據 ogr 語句 亂碼 hello 1 #include <stdio.h> 2 3 int main() 4 { 5 printf("hello, world\n"); 6 } 1.1 信息就是位+上下文 h
第四章 字典和集合(當索引行不通時)
一、字典 1. 建立和使用字典 phonebook={'Alice': '2341', 'Beth' : '9102', 'Cecil' : '3258'} 字典由鍵及其相應的值組成,這種鍵-值對稱為項(item)。在上面例子中,鍵為名字,值為號碼,每個鍵與值間都用冒號分隔,項之間用
第七章:整合學習(利用AdaBoost元演算法...)
---恢復內容開始--- 整合學習其實不能算一個演算法,應該算是一種框架,集百家之長。整合演算法具體有Bagging與Boosting兩種大類。兩者區別: 1)Bagging是並行的,它就好比找男朋友,美女選擇擇偶物件的時候,會問幾個閨蜜(幾個演算法)的建議,最後選擇一個綜合得分最高的一個作為男朋
Hadoop基礎教程-第1章 環境安裝配置(1.5 構建叢集)
第1章 環境安裝配置 1.5 構建叢集 1、叢集概念 根據百度的解釋: 叢集是一組相互獨立的、通過高速網路互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與叢集相互作用時,叢集像是一個獨立的伺服器。叢集配置是用於提高可用性和可
第四章 串和數組 (主要kmp算法)
bsp 移動 算法 匹配 方便 void 不可 順序 聲明 第四章 題目:串的模式匹配 給定一個主串S(長度<=10^6)和一個模式T(長度<=10^5),要求在主串S中找出與模式T相匹配的子串,返回相匹配的子串中的第一個字符在主串S中出現的位置。 (用K
《Java多執行緒程式設計實戰》—— 第9章 Thread Pool(執行緒池)模式
一個系統中的執行緒相對於其所要處理的任務而言,是一種非常有限的資源。執行緒不僅在執行任務時需要消耗CPU時間和記憶體等資源,執行緒物件(Thread例項)本身以及執行緒所需的呼叫棧(Call Stack)也佔用記憶體,並且Java中建立一個執行緒往往意味著JVM會建立相應的依賴於宿主機作業系
《Java多執行緒程式設計實戰》—— 第8章 Active Object(主動物件)模式
Active Object模式是一種非同步程式設計模式。(跟Promise模式有什麼區別呢?) 通過對方法的呼叫與方法的執行進行解耦來提高併發性。 類圖 當Active Object模式對外暴露的非同步方法被呼叫時,與該方法呼叫相關的上下文資訊,包括被呼叫的非同步方法名、引數等,會被
《Java多執行緒程式設計實戰》——第七章Producer-Consumer(生產者/消費者)模式
Producer-Consumer模式的核心是通過通道對資料(或任務)的生產者和消費者進行解耦,從而使二者的處理速率相對來說互不影響。 類圖 BlockingQueueChannel: 當佇列滿時,將當前執行緒掛起直到佇列非滿 當佇列為空時,將當前執行緒掛起直到佇列
《Java多執行緒程式設計實戰》——第6章 Promise(承諾)模式
Promise模式是一種非同步程式設計模式。 開始一個任務的執行,並得到一個用於獲取該任務執行結果的憑據物件,而不必等待該任務執行完畢就可以繼續執行其他操作。 等到需要該任務的執行結果時,再呼叫憑據物件的相關方法來獲取。 類圖 獲取執行結果時,可能由於非同步任務尚未執行完畢而阻塞。
《Java多執行緒程式設計實戰》——第5章 Two-phase Termination(兩階段終止)模式
Two-phase Termination模式通過將停止執行緒分解為準備階段和執行階段兩個階段,提供了一種通用的優雅停止執行緒的方法。 準備階段:通知目標執行緒準備進行停止。 設定標誌變數。 呼叫目標執行緒的interrupt方法。 對於能夠對interrupt方法呼
《Java多執行緒程式設計實戰》——第4章 Guarded Suspension(保護性暫掛)模式
一個執行緒等待另一個執行緒完成一定的操作,才能繼續執行。 核心思想是如果某個執行緒執行特定的操作前需要滿足一定的條件,則在該條件未滿足時將該執行緒暫停執行(waiting)。 類圖 如果頻繁出現保護方法被呼叫時保護條件不成立,那麼保護方法的執行執行緒就會頻繁地被暫掛和喚醒,而導致頻繁
《Java多執行緒程式設計實戰》——第3章 Immutable Object(不可變物件)模式
通過使用對外可見的狀態不可變的物件,無需額外的同步訪問控制。既保證了資料一致性,又避免了同步訪問控制所產生的額外開銷和問題,也簡化了程式設計。 狀態不可變的物件:物件一經建立,其對外可見的狀態就保持不變,如String和Integer。 Immutable Object模式:將現實世界中狀態
《Java多執行緒程式設計實戰》——第2章 設計模式及其作用
設計模式與三十六計 多執行緒設計模式簡介 不使用鎖的情況下保證執行緒安全 Immutable Object(不可變物件)模式 Thread Specific Storage(執行緒特有儲存)模式 Serial Thread Confinement(序列執行緒封