Java多執行緒之執行緒封閉 三

2021-08-11 11:36:14 字數 611 閱讀 2218

執行緒封閉的概念

訪問共享變數時,通常要使用同步,所以避免使用同步的方法就是減少共享資料的使用,這種技術就是執行緒封閉。

1:ad-hoc執行緒封閉

這是完全靠實現者控制的執行緒封閉,他的執行緒封閉完全靠實現者實現。也是最糟糕的一種執行緒封閉。所以我們直接把他忽略掉吧。

2:棧封閉

棧封閉是我們程式設計當中遇到的最多的執行緒封閉。什麼是棧封閉呢?簡單的說就是區域性變數。多個執行緒訪問乙個方法,此方法中的

區域性變數都會被拷貝一分兒到執行緒棧中。所以區域性變數是不被多個執行緒所共享的,也就不會出現併發問題。所以能用區域性變數就別用全域性的變數,全域性變數容易引起併發問題。

3:threadlocal封閉

使用threadlocal是實現執行緒封閉的最好方法,有興趣的朋友可以研究一下threadlocal的原始碼,其實我們可以理解threadlocal內部維護了乙個map,map的key是每個執行緒的名稱,而map的值就是我們要封閉的物件。每個執行緒中的物件都對應著map中乙個值,也就是threadlocal利用map實現了物件的執行緒封閉。

推薦部落格:

總之,當我們要用執行緒封閉來避免併發問題的時候,最好使用的就是 【棧封閉】 和 【threadlocal】。

JAVA多執行緒之 執行緒池

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

Java多執行緒之執行緒安全

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

java執行緒封閉

package com.ly.study.base 執行緒封閉示例 public class threadlocaltestclass start thread.sleep 5000l 等待所有執行緒執行結束 v value.get system.out.println 執行緒1執行之後,主線程取到...