不同角度看Handler 另類三問

2022-01-10 06:17:35 字數 1782 閱讀 7089

之前有一章節介紹了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中嵌入瀏覽器核心的東西不在討...

換個角度看理財

個人理財不僅是金融規劃,要從掙 賺 省 防四個方面入手。雖然越來越多的經理人開始重視理財,但真正熟悉理財的卻不多。理財包含哪些內容?應該怎樣做?介紹理財的四個方面和應注意的一些問題。什麼是理財 個人理財是在既定的理財目標下,充分分析個人財物現狀和風險承擔能力,通過平衡安排各種收入與支出,選擇不同風險...