一、反射機制的應用場景
(相關教學建議:java面試題)
逆向程式碼,例如反編譯
與註解相結合的框架例如Retrofit
#單純的反射機制應用框架例如EventBus 2.x
動態產生類別框架例如Gson
二、什麼是多執行緒?
多執行緒,是指從軟體或硬體上實作多個執行緒並發執行的技術。 在一個程式中,這些獨立運作的程式片段叫作“執行緒”,利用它程式設計的概念就叫作“多執行緒處理”。
具有多線程能力的電腦因有硬體支援而能夠在同一時間執行多於一個線程,進而提升整體處理效能。
主線程就是創建進程中產生的第一個線程,也就是main函數對應的線程。
(推薦學習:java入門程式)
三、說一下多執行緒的好處?
1、多執行緒的優點
建立一個新執行緒的代價要比建立一個新行程小的多
#執行緒之間的切換相較於行程之間的切換需要作業系統做的工作很少
#執行緒佔用的資源要比行程少很多
能充分利用多處理器的可並行數量
等待慢速IO操作結束以後,程式可以執行其他的運算任務
#計算(CPU)密集型應用,為了能在多處理器系統上運行,將計算分解到多個線程中實現
IO密集型應用,為了提高效能,將IO操作重疊,執行緒可以等待不同的IO操作。
2、多執行緒的缺點
效能損失( 一個運算密集型執行緒是很少被外部事件阻塞的,無法和其他執行緒共享同一個處理器,當計算密集型的執行緒的數量比可用的處理器多,那麼就有可能有很大的效能損失,這裡的效能損失是指增加了額外的同步和調度開銷,二可用資源不變。)
健壯性降低(線程之間是缺乏保護性的。在一個多線程程式裡,因為時間上分配的細微差距或者是共享了一些不應該共享的變數而造成不良影響的可能影響是很大的。)
缺乏存取控制( 因為進程是存取控制的基本粒度,在一個執行緒中呼叫某些OS函數會對整個進程造成影響。)
程式設計難度提高(編寫和偵錯一個多執行緒程式比單執行緒困難的多。)
四、執行緒和行程有什麼差別?
1、調度
進程是作業系統分配資源的一個基本單位。執行緒是 CPU調度的基本單位。
2、並發性
引入線程之後,不僅進程之間是可以並發執行的,而且在一個進程之中的多個線程也是可以並發執行的,甚至是允許一個進程中的全部進程並發執行。
同樣,不同的行程中的執行緒也是可以並發執行的。使得OS有 更好的並發性,提高了資源的利用率和系統吞吐量。
3、擁有資源
行程可以擁有資源,並且是系統擁有資源的基本單位 。執行緒本身不擁有系統資源,僅有一些能保證獨立運作 的資源,這塊資源的各個執行緒私有的。
例如,執行緒ID、一組暫存器、堆疊、errno、訊號屏蔽字(一個行程中pending訊號只有一個,但是任一個執行緒都可以處理這個訊號)、調度優先權。
4、獨立性
在同一進程中執行緒的獨立性比在不同的進程中獨立性要低很多 。
5、系統開銷
執行緒切換的開銷低於進程切換的開銷,
6、支援多處理機系統
對於傳統的進程,也就是單執行緒進程,不管有多少個處理機,進程只能運行在同一個處理機上面,但對於多執行緒進程,就可以將一個進程中的多個執行緒分配到多個處理機上面,使其並發執行,加速了進程的完成。
(影片教學推薦:java影片教學)
五、行程和執行緒的應用場景
需要頻繁建立銷毀優先使用執行緒。
需要大量計算的優先使用執行緒。
相關性較強的使用線程,相關性較弱使用進程。
可能要擴展到多機分佈使用進程,多核心分佈使用執行緒。
以上是java經典面試題集錦(四)的詳細內容。更多資訊請關注PHP中文網其他相關文章!