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