Android高頻面試題:該怎樣在Android面試中聊聊多執行緒不被忽悠?

南方吳彥祖_藍斯發表於2020-09-16

Android高頻面試題:該怎樣在Android面試中聊聊多執行緒不被忽悠?多執行緒可以說是Android面試的高頻問題了,而多執行緒涉及的內容非常多,因此在面試當中往往不知道從何說起,本文並 不是為了科普多執行緒或者研究多執行緒的知識,而是嘗試組織語言以便在面試當中更好地忽悠面試官。

語言表達在面試當中雖說很重要, 不過更重要的還是相關知識技能過硬。

假如在一場Android面試當中,面試官讓你聊聊多執行緒,你可以試試這樣回答。

Android中的執行緒

在Android當中, 當應用啟動的時候,系統會給應用分配一個 程式,順便一提, 大部分應用都是單程式的,不過也可以透過設定來使不同元件執行在不同的程式中,在建立程式的同時會建立一個 執行緒,應用的大部分操作都會在這個執行緒中執行,所以稱為 主執行緒,同時所有的UI控制元件相關的操作也要求在這個執行緒中操作,所以也稱為 UI執行緒

UI執行緒和工作執行緒

因為所有的UI控制元件的操作都在UI執行緒中執行,如果在UI執行緒中執行耗時操作,例如網路請求等,就會阻塞UI執行緒,導致系統報 ANR(Application Not Response)錯誤。因此對於耗時操作需要建立 工作執行緒來執行而不能直接在UI執行緒中執行。這樣就需要在應用中使用多執行緒,但是Android提供的UI工具包並不是執行緒安全的,也就是說 不能直接在工作執行緒中訪問UI控制元件,否則會導致不能預測的問題,因此需要額外的機制來進行 執行緒互動,主要是讓其他執行緒可以訪問UI執行緒。

執行緒互動 - Handler機制

在Android當中,工作執行緒主要透過 Handler機制來訪問UI執行緒。當然還有一些封裝好的類例如AsyncTask可以使用,但是本質仍是使用Handler。

Handler機制主要由4部分組成, Looper,訊息佇列,訊息類和Handler組成,其中Looper和訊息佇列是和 執行緒繫結的,每個執行緒只會有一個Looper和一個訊息佇列,當Looper啟動時,它會無限迴圈嘗試從訊息佇列中獲取訊息例項,如果沒有訊息則會阻塞等待。當Handler傳送訊息時會把訊息例項放入訊息佇列中,Looper從中取得訊息例項然後就會呼叫Handler的相關方法,因為Looper是執行緒繫結的,如果繫結的是UI執行緒,那麼此時Handler的方法就會在UI執行緒中得到執行,執行緒間就是這樣進行互動的。

java中的執行緒

而Handler機制的底層實現則是使用java多執行緒相關的類。

java當中主要使用Thread和Executor來實現多執行緒。Thread用於直接建立執行緒,在Android中也可以直接使用這個類,Looper中就包含一個Thread例項。Executor是一個介面,大部分java中自帶的實現都使用了 執行緒池來管理多執行緒。

執行緒池

因為在系統中建立執行緒是一個比較耗費資源的事,所以不能頻繁建立和釋放執行緒,因此在效率上考慮通常會使用執行緒池,同時也便於執行緒的管理。Android中的AsyncTask就使用了執行緒池。

執行緒安全

另一個在使用多執行緒時需要注意的是執行緒安全的問題,因為同一程式中的執行緒可以共享記憶體,雖然這種方式效率很高,但是會導致執行緒干擾和記憶體一致性的問題。

解決這些問題的主要方法是使用Synchronized關鍵字來加鎖。基本原理就是執行緒要對物件進行操作前需要先獲取鎖,如果一個執行緒正在操作某個物件,那麼它就會持有相應的鎖,後來的執行緒想要操作這個物件,只能等待前面的執行緒釋放鎖之後才有機會獲取鎖並進行操作。

死鎖和活鎖

引入鎖之後仍有可能出現一些問題,例如死鎖,飢餓(Starvation)和活鎖。

多執行緒工具包

同時java還提供不少工具來使用多執行緒,例如剛剛提到的Executor,另外常用的還有執行緒安全的集合,例如ConcurrentMap,可以用來避免記憶體一致性的問題。

如果你是面試官,你被忽悠到了嗎?歡迎在討論區說說你的看法。

最後

以上面試中問到的題目基本上都可以在上面找到答案,所以做準備是很重要的,但技術是一點點積累的,就算你全會背了,面試過了,真正等到工作的時候還是會捉襟見肘的,所以踏實點吧騷年。

最後為了幫助大家深刻理解Android相關知識點的原理以及面試相關知識,這裡放上相關的我搜集整理的24套騰訊、位元組跳動、阿里、百度 2019-2020BAT 面試真題解析,我把大廠面試中 常被問到的技術點整理成了影片和PDF(實際上比預期多花了不少精力),包知識脈絡 + 諸多細節。

還有 高階架構技術進階腦圖 幫助大家學習提升進階,也節省大家在網上搜尋資料的時間來學習,也可以分享給身邊好友一起學習。

領取: 【PDF】

Android 基礎知識點

Android高頻面試題:該怎樣在Android面試中聊聊多執行緒不被忽悠?

Java 基礎知識點


Android高頻面試題:該怎樣在Android面試中聊聊多執行緒不被忽悠?

Android 原始碼相關分析

Android高頻面試題:該怎樣在Android面試中聊聊多執行緒不被忽悠?

常見的一些原理性問題

Android高頻面試題:該怎樣在Android面試中聊聊多執行緒不被忽悠?

騰訊、位元組跳動、阿里、百度等BAT大廠 2019-2020面試真題解析

Android高頻面試題:該怎樣在Android面試中聊聊多執行緒不被忽悠?

以上內容,均可以免費分享給大家,希望大家在今年的金九銀十里能夠發揮順利,進到自己想進的公司,共勉!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2721773/,如需轉載,請註明出處,否則將追究法律責任。

相關文章