一、反射機(jī)制的應(yīng)用場(chǎng)景
(相關(guān)教程推薦:java面試題)
-
逆向代碼 ,例如反編譯
-
與注解相結(jié)合的框架 例如Retrofit
-
單純的反射機(jī)制應(yīng)用框架 例如EventBus 2.x
-
動(dòng)態(tài)生成類(lèi)框架 例如Gson
二、什么是多線程?
多線程,是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。 在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片段叫作“線程”,利用它編程的概念就叫作“多線程處理”。
具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程,進(jìn)而提升整體處理性能。
主線程就是創(chuàng)建進(jìn)程中產(chǎn)生的第一個(gè)線程,也就是main函數(shù)對(duì)應(yīng)的線程。
(推薦學(xué)習(xí):java入門(mén)程序)
三、說(shuō)一下多線程的好處?
1、多線程的優(yōu)點(diǎn)
-
創(chuàng)建一個(gè)新線程的代價(jià)要比創(chuàng)建一個(gè)新進(jìn)程小的多
-
線程之間的切換相較于進(jìn)程之間的切換需要操作系統(tǒng)做的工作很少
-
線程占用的資源要比進(jìn)程少很多
-
能充分利用多處理器的可并行數(shù)量
-
等待慢速 IO操作結(jié)束以后,程序可以執(zhí)行其他的計(jì)算任務(wù)
-
計(jì)算(CPU)密集型應(yīng)用,為了能在多處理器系統(tǒng)上運(yùn)行,將計(jì)算分解到多個(gè)線程中實(shí)現(xiàn)
-
IO密集型應(yīng)用,為了提高性能,將IO操作重疊,線程可以等待不同的IO操作。
2、多線程的缺點(diǎn)
-
性能損失( 一個(gè)計(jì)算密集型線程是很少被外部事件阻塞的,無(wú)法和其他線程共享同一個(gè)處理器,當(dāng)計(jì)算密集型的線程的數(shù)量比可用的處理器多,那么就有可能有很大的性能損失,這里的性能損失是指增加了額外的同步和調(diào)度開(kāi)銷(xiāo),二可用資源不變。)
-
健壯性降低(線程之間是缺乏保護(hù)性的。在一個(gè)多線程程序里,因?yàn)闀r(shí)間上分配的細(xì)微差距或者是共享了一些不應(yīng)該共享的變量而造成不良影響的可能影響是很大的。)
-
缺乏訪問(wèn)控制( 因?yàn)檫M(jìn)程是訪問(wèn)控制的基本粒度,在一個(gè)線程中調(diào)用某些OS函數(shù)會(huì)對(duì)整個(gè)進(jìn)程造成影響 。)
-
編程難度提高(編寫(xiě)和 調(diào)試一個(gè)多線程程序比單線程困難的多。)
四、線程和進(jìn)程有什么區(qū)別?
1、調(diào)度
進(jìn)程是操作系統(tǒng)分配資源的一個(gè)基本單位。線程是 CPU調(diào)度的基本單位。
2、并發(fā)性
引入線程之后,不僅進(jìn)程之間是可以并發(fā)執(zhí)行的,而且在一個(gè)進(jìn)程之中的多個(gè)線程也是 可以并發(fā)執(zhí)行的,甚至是允許一個(gè)進(jìn)程中 的全部進(jìn)程并發(fā)執(zhí)行。
同樣,不同的進(jìn)程中的線程也是可以并發(fā)執(zhí)行的。使得OS有 更好的并發(fā)性,提高了資源的利用率和系統(tǒng)吞吐量。
3、擁有資源
進(jìn)程可以擁有資源,并且是系統(tǒng)擁有資源的基本單位 。線程本身并不擁有系統(tǒng)資源,僅有一些能保證獨(dú)立運(yùn)行 的資源,這塊資源的各個(gè)線程私有的。
例如,線程ID、一組寄存器、棧、errno、信號(hào)屏蔽字(一個(gè)進(jìn)程中pending信號(hào)只有一個(gè),但是任意一個(gè)線程都可以處理這個(gè)信號(hào))、調(diào)度優(yōu)先級(jí)。
4、獨(dú)立性
在同一進(jìn)程中線程的獨(dú)立性要比在不同的進(jìn)程中獨(dú)立性要低很多 。
5、系統(tǒng)開(kāi)銷(xiāo)
線程切換的開(kāi)銷(xiāo)低于進(jìn)程切換的開(kāi)銷(xiāo),
6、支持多處理機(jī)系統(tǒng)
對(duì)于傳統(tǒng)的進(jìn)程,也就是單線程進(jìn)程 ,不管有多少個(gè)處理機(jī),進(jìn)程只能運(yùn)行在同一個(gè) 處理機(jī)上面,但對(duì)于多線程進(jìn)程,就可以將一個(gè)進(jìn)程中的多個(gè)線程分配到多個(gè)處理機(jī)上面,使其并發(fā)執(zhí)行,加速了進(jìn)程的完成。
(視頻教程推薦:java視頻教程)
五、進(jìn)程和線程的應(yīng)用場(chǎng)景
-
需要頻繁創(chuàng)建銷(xiāo)毀優(yōu)先使用線程。
-
需要大量計(jì)算的優(yōu)先使用線程。
-
相關(guān)性較強(qiáng)的使用線程,相關(guān)性較弱使用進(jìn)程。
-
可能要擴(kuò)展到多機(jī)分布使用進(jìn)程,多核分布使用線程。