1. 程式人生 > 其它 >多執行緒與高併發(4)

多執行緒與高併發(4)

避免併發兩種方式

  1. 不可變物件
  2. 執行緒封閉

    執行緒封閉:把物件封裝到一個執行緒裡,只有這一個執行緒可以看到這個物件,即使這個物件不是執行緒安全也不會出現任何執行緒安全問題,因為只在一個執行緒裡

    1. 堆疊封閉區域性變數,無併發問題。棧封閉是我們程式設計當中遇到的最多的執行緒封閉。什麼是棧封閉呢?簡單的說就是區域性變數。多個執行緒訪問一個方法,此方法中的區域性變數都會被拷貝一分兒到執行緒棧中。所以區域性變數是不被多個執行緒所共享的,也就不會出現併發問題。所以能用區域性變數就別用全域性的變數,全域性變數容易引起併發問題。
    2. ThreadLocal執行緒封閉:比較推薦的執行緒封閉方式。
      【ThreadLocal結合filter完成資料儲存到ThreadLocal裡,執行緒隔離。】通過filter獲取到資料,放入ThreadLocal, 當前執行緒處理完之後interceptor將當前執行緒中的資訊移除。
      使用ThreadLocal是實現執行緒封閉的最好方法。ThreadLocal內部維護了一個Map,Map的key是每個執行緒的名稱,而Map的值就是我們要封閉的物件。每個執行緒中的物件都對應著Map中一個值,也就是ThreadLocal利用Map實現了物件的執行緒封閉