ThreadLocal 的原理分析

2021-08-22 06:08:16 字數 1209 閱讀 9922

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只是提供乙個容器。如果在應用上為每個執行...