threadlocal是乙個關於建立執行緒區域性變數的類。對於 threadlocal 的原理分析,我們從 android 的looper類開始分析,我們知道 looper.mylooper() 會返回當前 thread 的 looper。我們就來看看 mylooper() 方法為什麼可以返回當前執行緒的 looper,而不是其他執行緒的 looper。
public
final
class
looper
//儲存當前執行緒的 looper
sthreadlocal.set(new looper(quitallowed));
}//獲取當前執行緒的 looper
public
static @nullable looper mylooper()
...}
獲取當前執行緒的 looper 是通過 threadlocal 類的 get() 方法來獲取的,我們來看下它的**實現:
public
class
threadlocal }
return setinitialvalue();
}//直接返回 thread 的成員變數 threadlocals
threadlocalmap getmap(thread t)
public
void
set(t value)
void createmap(thread t, t firstvalue)
}
threadlocalmap 是 threadlocal 的乙個內部靜態類,它是用來儲存資料的,它的 getentry() 方法如下:
static class threadlocalmap
}
這裡的關鍵是 thread 類儲存了乙個成員變數 threadlocal.threadlocalmap,所以每個執行緒都有乙個 map 來儲存值。
public
class
thread
implements
runnable
從上面的流程可以看出 threadlocal 類的 get 主要原理步驟就是:
獲取到當前執行緒
獲取到當前執行緒的 threadlocal.threadlocalmap 成員變數
從成員變數 map 中取值或存值
ThreadLocal實現原理與原始碼分析
threadlocal底層實現內部類 threadlocalmap 一 threadlocal的set方法原始碼分析 1 public void set t value thread t thread.currentthread threadlocalmap map getmap t if map ...
ThreadLocal原理探尋
筆者今天趁著專案空隙,學習了下threadlocal這個類,探尋了下多執行緒下如何實現執行緒安全的原理。分享下 package com.suning.sample.transcation public class threadtest public static void main string a...
ThreadLocal原理詳解
threadlocal稱為執行緒本地變數,其為變數在每個執行緒中都建立了乙個副本,每個執行緒都訪問和修改本執行緒中變數的副本。應用示例 可以看出,為每個執行緒分配乙個變數副本的工作並不是由threadlocal實現的,需要在應用層面實現,threadlocal只是提供乙個容器。如果在應用上為每個執行...