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物件。只所以可以在activity中直接例項化handler,是因為activitythread作為程式的入口,已經例項化好了looper物件。因此保證了乙個執行緒只有乙個looper物件
注意:執行緒是預設沒有looper的,如果需要使用handler,就必須為執行緒建立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.裝箱就是講基本資料型別轉換為包裝類,拆箱就是自動將包裝類轉換為基本資料...