大廠Android研發崗面試複盤,帶你全面掌握高級知識點

安卓開發yyds 2021-09-20 02:06:48 阅读数:674

android 全面 掌握

在很多的博客或者書上,說有三種,除了上述的兩種以外,還有一種是實現Callable接口。但是這種並不是,因為,我們檢查JDK中Thread的源碼,看它的注釋:

There are two ways to create a new thread of execution. One is to declare a class to be a subclass of Thread. This subclass should override the run method of class Thread. An instance of the subclass can then be allocated and started.

這裏面明確指出,只有兩種方式創建一個新線程執行,而且Thread類的構造方法裏,也沒有接受參數類型為Callable的方法。所以新啟線程的方式只有上述兩種。

Thread和Runnable的區別

我們知道Java是面向對象的語言,對於線程來說,這是操作系統層面的概念,那麼對於線程來說,Thread和Runnable誰才是線程呢?

要注意,Thread才是Java裏對線程的唯一抽象,Runnable只是對任務(業務邏輯)的抽象。Thread可以接受任意一個Runnable的實例並執行。用一個生活中的例子來說明,一個開發部門中有很多的開發人員,每個開發人員都可以開發程序,這樣,每個開發人員就是一個個的Thread,而開發人員接收到的開發任務就是一個個的Runnable,開發人員是做實際開發工作的,不同的開發人員完全可以接受同一個開發任務。

深入理解run()和start()

同時,我們通過new Thread()其實只是new出一個Thread的實例,還沒有操作系統中真正的線程掛起鉤來。只有執行了start()方法後,才實現了真正意義上的啟動線程。

start()方法讓一個線程進入就緒隊列等待分配CPU,分到CPU後才調用實現的run()方法,start()方法不能重複調用,如果重複調用會拋出IllegalThreadStateException异常。

而run方法是業務邏輯實現的地方,本質上和任意一個類的任意一個成員方法並沒有任何區別,可以重複執行,也可以被單獨調用。

線程的狀態

Java中線程的狀態也不是簡單的只有運行和死亡,共分為6種:

  1. 初始(NEW):新創建了一個線程對象,但還沒有調用start()方法。

  2. 運行(RUNNABLE):Java線程中將就緒(ready)和運行中(running)兩種狀態籠統的稱為“運行”。

線程對象創建後,其他線程(比如main線程)調用了該對象的start()方法。該狀態的線程比特於可運行線程池中,等待被線程調度選中,獲取CPU的使用權,此時處於就緒狀態(ready)。就緒狀態的線程在獲得CPU時間片後變為運行中狀態(running)。

  1. 阻塞(BLOCKED):錶示線程阻塞於鎖。

  2. 等待(WAITING):進入該狀態的線程需要等待其他線程做出一些特定動作(通知或中斷)。

  3. 超時等待(TIMED_WAITING):該狀態不同於WAITING,它可以在指定的時間後自行返回。

  4. 終止(TERMINATED):錶示該線程已經執行完畢。

理解了線程的狀態才能更好的讓我們在並發編程調試程序時,知道線程的工作情况,進而有針對性的檢查我們的代碼的運行情况,進一步優化我們的代碼。

尾聲

一轉眼時間真的過的飛快。我們各奔東西,也各自踏上了自己的旅途,但是即使多年不見,也因為這份情誼我們依舊如從前那般“親密”。不忘初心方得始終。加油吧,程序員們,在我看來35歲,40歲從來不是危機,只要永遠不要忘記自己為何踏上征程!

 CodeChina開源項目:《Android學習筆記總結+移動架構視頻+大廠面試真題+項目實戰源碼》

為了讓更多在學習中或者最近要准備面試的朋友們看到這篇文章,希望你們能多多評論,點贊+轉發!

再次感謝所有給我提供過題目的朋友們,感謝一路有你!

版权声明:本文为[安卓開發yyds]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210920020647720B.html