Handler的一點理論分析

2021-09-11 12:33:59 字數 1177 閱讀 2812

threadlocal是乙個執行緒內部的資料儲存類。它可以為各執行緒儲存資料,同時只能由當前執行緒獲取到儲存的資料,對於其他執行緒來說則獲取不到。它可以在不同執行緒中維護一套資料的副本,並且彼此互不干擾。

一言不合上**:

private static threadlocalthreadlocal = new threadlocal();

public static

void main(string args) ;

}.start();

new thread("thread#2") ;

}.start();

}複製**

輸出結果為:

main--value:1

thread#1--value:2

thread#2--value:null複製**

threadlocal內部為當前執行緒維護了乙個threadlocalmap。key是threadlocal物件,value則是需要設定的值,儲存在entry中。

handler建立時,會獲取到訊息佇列和當前執行緒的looper物件來構建訊息迴圈系統,那麼如何獲取到當前執行緒的looper呢?就是用到threadlocal,它儲存了looper物件。保證了不同執行緒間提供對應的looper物件。

因此保證了乙個執行緒只有乙個looper物件

注意:執行緒是預設沒有looper的,如果需要使用handler,就必須為執行緒建立looper。

只所以可以在activity中直接例項化handler,是因為activitythread作為程式的入口,已經例項化好了looper物件。

public final class

activitythread

if (false)

looper.loop();

throw

new runtimeexception("main thread loop unexpectedly exited");

}}複製**

因此如果需要在子執行緒中使用handler,則必須先例項化looper。

new thread("thread#1")

}.start();複製**

關於handler機制的一點見解

當handler接收到message時,會先去查詢looper物件,而looper物件會建立乙個messagequeue並且管理它。這條接收到的message會放入looper的messagequeue中,looper 通過不斷的輪詢,當獲取到message時,會將該訊息 回handler,然後ha...

c 關於Handler得一點說明。

如下 private void toolstripbutton1 click object sender,eventargs e private void picturebox1 mouseclick object sender,mouseeventargs e mymap.layers.add l...

一點一點進步

requestparam,是獲取前端傳遞給後端的引數,可以使get方式,也可以是post方式。若前端傳遞的引數和後端接收的引數名稱不一致,則必須要標註。pathvariable,是獲取get方式,url後面引數,進行引數繫結。1.裝箱就是講基本資料型別轉換為包裝類,拆箱就是自動將包裝類轉換為基本資料...