回覆列表
  • 1 # 使用者4791614089678

    ThreadLocal就是變數在不同執行緒上的副本,不同執行緒不共享,所以對變數改動時就不需要考慮執行緒間同步的問題了ThreadLocal在web應用開發中是一種很常見的技巧,當web端採用無狀態寫法時(比如stateless session bean和spring預設的singleton),就可以考慮把一些變數放在ThreadLocal中舉個簡單例子,以理解意思為主:你有兩個方法A和B都要用到變數userId,又不想傳來傳去,一個很自然的想法就是把userId設為成員變數,但是在無狀態時,這樣做就很可能有問題,因為多個request在同時使用同一個instance,userId在不同request下值是不一樣的,就會出現邏輯錯誤但由於同一個request下一般都是處於同一個執行緒,如果放在ThreadLocal的話,這個變數就被各個方法共享了,而又不影響其他request,這種情況下,你可以簡單把它理解為是一種沒有副作用的成員變數

  • 2 # 使用者928021938244

    ThreadLocal不是用來解決物件共享訪問問題的,而主要是提供了保持物件的方法和避免參數傳遞的方便的物件訪問方式。歸納了兩點:

    1。每個執行緒中都有一個自己的ThreadLocalMap類物件,可以將執行緒自己的物件保持到其中,各管各的,執行緒可以正確的訪問到自己的物件。

    2。將一個共用的ThreadLocal靜態例項作為key,將不同物件的引用儲存到不同執行緒的ThreadLocalMap中,然後線上程執行

    的各處透過這個靜態ThreadLocal例項的get()方法取得自己執行緒儲存的那個物件,避免了將這個物件作為引數傳遞的麻煩。

    ThreadLocal的應用場合,我覺得最適合的是按執行緒多例項(每個執行緒對應一個例項)的物件的訪問,並且這個物件很多地方都要用到。

  • 中秋節和大豐收的關聯?
  • 各位田徑大佬請問一下蹲踞式起跑的前幾步需要怎麼跑?