關于多線程的幾道面試題
第一題:線程的基本概念、線程的基本狀態(tài)及狀態(tài)之間的關系?
線程,有時稱為輕量級進程,是CPU使用的基本單元;它由線程ID、程序計數(shù)器、寄存器集合和堆棧組成。
它與屬于同一進程的其他線程共享其代碼段、數(shù)據(jù)段和其他操作系統(tǒng)資源(如打開文件和信號)。
線程有四種狀態(tài):新生狀態(tài)、可運行狀態(tài)、被阻塞狀態(tài)、死亡狀態(tài)。狀態(tài)之間的轉換如下圖所示:

第二題:線程與進程的區(qū)別?
1、 線程是進程的一部分,所以線程有的時候被稱為是輕權進程或者輕量級進程。
2、 一個沒有線程的進程是可以被看作單線程的,如果一個進程內(nèi)擁有多個進程,進程的執(zhí)行過程不是一條線(線程)的,而是多條線(線程)共同完成的。
3、 系統(tǒng)在運行的時候會為每個進程分配不同的內(nèi)存區(qū)域,但是不會為線程分配內(nèi)存(線程所使用的資源是它所屬的進程的資源),線程組只能共享資源。那就是說,出了CPU之外(線程在運行的時候要占用CPU資源),計算機內(nèi)部的軟硬件資源的分配與線程無關,線程只能共享它所屬進程的資源。
4、 與進程的控制表PCB相似,線程也有自己的控制表TCB,但是TCB中所保存的線程狀態(tài)比PCB表中少多了。
5、 進程是系統(tǒng)所有資源分配時候的一個基本單位,擁有一個完整的虛擬空間地址,并不依賴線程而獨立存在。
?
第三題:多線程有幾種實現(xiàn)方法,都是什么?
?1. 繼承 Thread 類
? 2. 實現(xiàn) Runnable 接口再 new Thread(YourRunnableOjbect)?
第四題:多線程同步和互斥有幾種實現(xiàn)方法,都是什么?
線程間的同步方法大體可分為兩類:用戶模式和內(nèi)核模式。顧名思義,內(nèi)核模式就是指利用系統(tǒng)內(nèi)核對象的單一性來進行同步,使用時需要切換內(nèi)核態(tài)與用戶態(tài),而用戶模式就是不需要切換到內(nèi)核態(tài),只在用戶態(tài)完成操作。
用戶模式下的方法有:原子操作(例如一個單一的全局變量),臨界區(qū)。內(nèi)核模式下的方法有:事件,信號量,互斥量。
?
第五題:多線程同步和互斥有何異同,在什么情況下分別使用他們?舉例說明。
線程同步是指線程之間所具有的一種制約關系,一個線程的執(zhí)行依賴另一個線程的消息,當它沒有得到另一個線程的消息時應等待,直到消息到達時才被喚醒。
線程互斥是指對于共享的進程系統(tǒng)資源,在各單個線程訪問時的排它性。
當有若干個線程都要使用某一共享資源時,任何時刻最多只允許一個線程去使用,其它要使用該資源的線程必須等待,直到占用資源者釋放該資源。線程互斥可以看成是一種特殊的線程同步(下文統(tǒng)稱為同步)。
文章來源:https://blog.csdn.net/wolenski/article/details/7969908
-- END --
推薦:
全網(wǎng)最全的 Android 音視頻和 OpenGL ES 干貨,都在這了
