(三)Java併發學習筆記–執行緒封閉
執行緒封閉
實現好的併發是一件困難的事情,所以很多時候我們都想躲避併發。避免併發最簡單的方法就是執行緒封閉。什麼是執行緒封閉呢?
就是把物件封裝到一個執行緒裡,只有這一個執行緒能看到此物件。那麼這個物件就算不是執行緒安全的也不會出現任何安全問題。實現執行緒封閉有哪些方法呢?
1. ad-hoc執行緒封閉
這是完全靠實現者控制的執行緒封閉,他的執行緒封閉完全靠實現者實現。也是最糟糕的一種執行緒封閉。所以我們直接把他忽略掉吧。
2. 棧封閉
棧封閉是我們程式設計當中遇到的最多的執行緒封閉。什麼是棧封閉呢?簡單的說就是區域性變數。多個執行緒訪問一個方法,此方法中的區域性變數都會被拷貝一分兒到執行緒棧中。所以區域性變數是不被多個執行緒所共享的,也就不會出現併發問題。所以能用區域性變數就別用全域性的變數,全域性變數容易引起併發問題。
3. ThreadLocal封閉
使用ThreadLocal是實現執行緒封閉的最好方法,有興趣的朋友可以研究一下ThreadLocal的原始碼,其實ThreadLocal內部維護了一個Map,Map的key是每個執行緒的名稱,而Map的值就是我們要封閉的物件。每個執行緒中的物件都對應著Map中一個值,也就是ThreadLocal利用Map實現了物件的執行緒封閉。這裡就不說ThreadLocal的使用方法了,度娘一下便知。
總之,當我們要用執行緒封閉來避免併發問題的時候,最好使用的就是 【棧封閉】 和 【ThreadLocal】。
相關文章
- Java併發程式設計學習筆記----執行緒池Java程式設計筆記執行緒
- java併發筆記之java執行緒模型Java筆記執行緒模型
- Java 多執行緒學習筆記Java執行緒筆記
- Java 併發程式設計學習筆記 05 :如何暫停執行緒?Java程式設計筆記執行緒
- Java多執行緒學習筆記(自用)Java執行緒筆記
- 《java學習三》併發程式設計 -------執行緒池原理剖析Java程式設計執行緒
- Thinking in Java--Java多執行緒學習筆記(1)ThinkingJava執行緒筆記
- Thinking in Java---多執行緒學習筆記(2)ThinkingJava執行緒筆記
- Python學習筆記 - 多執行緒Python筆記執行緒
- Linux程式執行緒學習筆記Linux執行緒筆記
- Java核心技術學習筆記——進階——第五章 Java多執行緒和併發程式設計——5.2 Java多執行緒實現Java筆記執行緒程式設計
- (一)Java併發學習筆記Java筆記
- JAVA 學習併發筆記(一)Java筆記
- Java併發(三)----建立執行緒的三種方式及檢視程式執行緒Java執行緒
- Java併發程式設計筆記6:執行緒池的使用Java程式設計筆記執行緒
- JAVA多執行緒併發Java執行緒
- Java併發之執行緒池ThreadPoolExecutor原始碼分析學習Java執行緒thread原始碼
- Dubbo學習筆記(三) RPC核心原理和執行緒模型筆記RPC執行緒模型
- 多執行緒筆記 三執行緒筆記
- Java併發(四)----執行緒執行原理Java執行緒
- Java核心技術學習筆記——進階——第五章 Java多執行緒和併發程式設計——5.5 Java併發框架ExecutorJava筆記執行緒程式設計框架
- Java多執行緒學習筆記(六) 長樂未央篇Java執行緒筆記
- Python學習筆記|Python之執行緒Python筆記執行緒
- Java多執行緒筆記Java執行緒筆記
- Java併發程式設計之執行緒篇之執行緒中斷(三)Java程式設計執行緒
- Java併發(一)----程式、執行緒、並行、併發Java執行緒並行
- java 執行緒學習Java執行緒
- Java併發——執行緒池ThreadPoolExecutorJava執行緒thread
- Java併發系列 — 執行緒池Java執行緒
- Java 併發:執行緒、執行緒池和執行器全面教程Java執行緒
- C# 多執行緒學習筆記 – 1C#執行緒筆記
- java多執行緒與併發 - 執行緒池詳解Java執行緒
- Java併發實戰一:執行緒與執行緒安全Java執行緒
- Java核心(三)併發中的執行緒同步與鎖Java執行緒
- 【JAVA併發第三篇】執行緒間通訊Java執行緒
- Java併發程式設計:Java執行緒Java程式設計執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒