更新時(shí)間:2020-04-14 14:20:38 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2519次
1.什么是進(jìn)程?
是一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集上的一次動(dòng)態(tài)執(zhí)行的過(guò)程,是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,是應(yīng)用程序運(yùn)行的載體。
2.什么是線程?
線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。
它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。
一條線程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù)。
3.進(jìn)程和線程的區(qū)別?
進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。
進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響。
線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒(méi)有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí),耗費(fèi)資源較大,效率要差一些。
但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。
4.多線程和單線程有什么區(qū)別?
單線程程序:程序執(zhí)行過(guò)程中只有一個(gè)有效操作的序列,不同操作之間都有明確的執(zhí)行先后順序,容易出現(xiàn)代碼阻塞
多線程程序:有多個(gè)線程,線程間獨(dú)立運(yùn)行,能有效地避免代碼阻塞,并且提高程序的運(yùn)行性能
5.為什么要使用多線程?
使用多線程可以減少程序的響應(yīng)時(shí)間。在單線程的情況下,如果某個(gè)程序很耗時(shí)或者陷入長(zhǎng)時(shí)間等待(如等待網(wǎng)絡(luò)響應(yīng)),此時(shí)程序?qū)⒉粫?huì)相應(yīng)鼠標(biāo)和鍵盤等操作,使用多線程后,可以把這個(gè)耗時(shí)的線程分配到一個(gè)單獨(dú)的線程去執(zhí)行,從而是程序具備了更好的交互性。
與進(jìn)程相比,線程的創(chuàng)建和切換開(kāi)銷更小。由于啟動(dòng)一個(gè)新的線程必須給這個(gè)線程分配獨(dú)立的地址空間,建立許多數(shù)據(jù)結(jié)構(gòu)來(lái)維護(hù)線程代碼段、數(shù)據(jù)段等信息,而運(yùn)行于同一個(gè)進(jìn)程內(nèi)的線程共享代碼段、數(shù)據(jù)段,線程的啟動(dòng)或切換的開(kāi)銷就比進(jìn)程要少很多。同時(shí)多線程在數(shù)據(jù)共享方面效率非常高。
多CPU或多核心計(jì)算機(jī)本身就具有執(zhí)行多線程的能力。如果使用單個(gè)線程,將無(wú)法重復(fù)利用計(jì)算機(jī)資源,造成資源的巨大浪費(fèi)。因此在多CPU計(jì)算機(jī)上使用多線程能提高CPU的利用率。
使用多線程能簡(jiǎn)化程序的結(jié)構(gòu),使用程序便于理解和維護(hù)。一個(gè)非常復(fù)雜的進(jìn)程可以分成多個(gè)線程來(lái)執(zhí)行。
6.什么是線程安全?
當(dāng)多個(gè)線程訪問(wèn)同一個(gè)對(duì)象時(shí),如果不用考慮這些線程在運(yùn)行時(shí)環(huán)境下的調(diào)度和交替運(yùn)行,也不需要進(jìn)行額外的同步,或者在調(diào)用方進(jìn)行任何其他的協(xié)調(diào)操作,調(diào)用這個(gè)對(duì)象的行為都可以獲取正確的結(jié)果,那這個(gè)對(duì)象是線程安全的。——<<深入Java虛擬機(jī)>>
7.為何要使用線程同步?
Java允許多線程并發(fā)控制,當(dāng)多個(gè)線程同時(shí)操作一個(gè)可共享的資源變量時(shí)(如數(shù)據(jù)的增刪改查),將會(huì)導(dǎo)致數(shù)據(jù)不準(zhǔn)確,相互之間產(chǎn)生沖突。
因此加入同步鎖以避免在該線程沒(méi)有完成操作之前,被其他線程的調(diào)用,從而保證了該變量的唯一性和準(zhǔn)確性。
8.如何確保線程安全?
對(duì)非安全的代碼進(jìn)行加鎖控制
使用線程安全的類
多線程并發(fā)情況下,線程共享的變量改為方法級(jí)的局部變量
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“2020年Java線程面試題,面試不愁”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)