之前有一章節介紹了handler的常見面試題,今天就來說說另類的,可能你沒關注的其他問題,一起看看吧。
那麼為什麼系統不允許
在子執行緒中訪問ui呢?
那麼為什麼不給ui控制項加鎖
呢?
假設我們不知道有這個類,如果要完成這樣乙個需求,從不同的執行緒獲取執行緒中的looper
,是不是可以採用乙個全域性物件,比如hashmap
,用來儲存執行緒和對應的looper
?所以需要乙個管理looper
的類,但是,執行緒中並不止這乙個要儲存和獲取的資料,還有可能有其他的需求,也是跟執行緒所繫結的。所以,我們的系統就設計出了threadlocal
這種工具類。
threadlocal
的工作流程是這樣的:我們從不同的執行緒可以訪問同乙個threadlocal
的get方法,然後threadlocal
會從各自的執行緒中取出乙個陣列,然後再陣列中通過threadlocal
的索引找出對應的value值。具體邏輯呢,我們還是看看**,分別是threadlocal
的get方法和set方法:
public void set(t value)
threadlocalmap getmap(thread t)
public t get()
}return setinitialvalue();
}
首先看看set方法,獲取到當前執行緒,然後取出執行緒中的threadlocals
變數,是乙個threadlocalmap
類,然後將當前的threadlocal
作為key,要設定的值作為value
存到這個map中。
get方法
就同理了,還是獲取到當前執行緒,然後取出執行緒中的threadlocalmap
例項,然後從中取到當前threadlocal
對應的值。
畫個圖方便理解記憶:
這時,主線程會進行休眠狀態,也就不會消耗cpu資源。當下個訊息到達的時候,就會通過pipe管道寫入資料然後喚醒主線程進行工作。
這裡涉及到阻塞和喚醒的機制叫做epoll 機制
。
先說說檔案描述符和i/o多路復用:
在linux作業系統中,可以將一切都看作是檔案,而檔案描述符簡稱fd,當程式開啟乙個現有檔案或者建立乙個新檔案時,核心向程序返回乙個檔案描述符,可以理解為乙個索引值。
i/o多路復用是一種機制,讓單個程序可以監視多個檔案描述符,一旦某個描述符就緒(一般是讀就緒或寫就緒),能夠通知程式進行相應的讀寫操作所以
i/o
多路復用其實就是一種監聽讀寫的通知機制,而linux提供的三種 io 復用方式分別是:select、poll 和 epoll
。而這其中epoll
是效能最好的多路i/o就緒通知方法。
所以,這裡用到的epoll
其實就是一種i/o多路復用方式,用來監控多個檔案描述符的i/o事件。通過epoll_wait
方法等待i/o事件,如果當前沒有可用的事件則阻塞呼叫執行緒。
從程式設計角度看B S C S到底有什麼不同
本文 網上人云亦云的東西就不重複了,沒有價值,這裡只談幾個對設計程式很關鍵的幾個區別。1使用的技術不同 2速度不同 3安全性要求不同 1使用的技術不同 b s前台使用css,html,js,c s就沒有這些概念。所以使用css,html,js的都是b s的系統,當然那些在c s中嵌入瀏覽器核心的東西...
從程式設計角度看B S C S到底有什麼不同???
網上人云亦云的東西就不重複了,沒有價值,這裡只談幾個對設計程式很關鍵的幾個區別。1使用的技術不同 2速度不同 3安全性要求不同 1使用的技術不同 b s前台使用css,html,js,c s就沒有這些概念。所以使用css,html,js的都是b s的系統,當然那些在c s中嵌入瀏覽器核心的東西不在討...
換個角度看理財
個人理財不僅是金融規劃,要從掙 賺 省 防四個方面入手。雖然越來越多的經理人開始重視理財,但真正熟悉理財的卻不多。理財包含哪些內容?應該怎樣做?介紹理財的四個方面和應注意的一些問題。什麼是理財 個人理財是在既定的理財目標下,充分分析個人財物現狀和風險承擔能力,通過平衡安排各種收入與支出,選擇不同風險...