- 問題:線程被掛起到底占不占用CPU(也就是說如果一個線程被掛起,它還會不會占用公共資源河劝,會不會讓其他要用這個公共資源的線程被阻塞)
答:掛起一般是主動的喻鳄,由系統(tǒng)或程序發(fā)出,不釋放CPU遇绞,可能釋放內(nèi)存,放在外存
為什么燎窘?因為在資源不足的情況下摹闽,操作系統(tǒng)對在內(nèi)存中的程序進行合理的安排,其中有的進程被暫時調(diào)離出內(nèi)存褐健,
當條件允許的時候付鹿,會被操作系統(tǒng)再次調(diào)回內(nèi)存,重新進入等待被執(zhí)行的狀態(tài)即就緒態(tài)
什么情況下出現(xiàn)蚜迅?當內(nèi)存中的某個程序需要大的內(nèi)存空間來執(zhí)行舵匾,但這時內(nèi)存有沒有空余空間了,那么操作系統(tǒng)就回根據(jù)調(diào)度算法把一些進程放到外存中去谁不,以騰出空間給正在執(zhí)行的程序的數(shù)據(jù)和程序坐梯,所以引如了掛起狀態(tài)
舉個例子說明?你主動對雇工說:“你睡覺去吧刹帕,用著你的時候我主動去叫你吵血,然后接著干活”。
- 問題:線程掛起和后臺運行是一樣的么
答:有一種線程偷溺,它是在后臺運行的蹋辅,它的任務(wù)是為其他的線程提供服務(wù),這種線程被稱為“后臺線程(Daemon Thread)”挫掏,又稱為“守護線程”或“精靈線程”侦另。JVM的垃圾回收線程就是典型的后臺線程。后臺線程有個特征:如果所有的前臺線程都死亡尉共,后臺線程會自動死亡褒傅。
后臺運行表示線程一在占用資源,而掛起是從內(nèi)存中清掉袄友,不占用內(nèi)存資源樊卓,兩個是不一樣的。
- 問題:計算機中的同步環(huán)境和異步環(huán)境到底是啥意思杠河,進程的同步又是啥
答:在計算機領(lǐng)域,同步就是指一個進程在執(zhí)行某個請求的時候,若該請求需要一段時間才能返回信息券敌,那么這個進程將會一直等待下去唾戚,直到收到返回信息才繼續(xù)執(zhí)行下去;
異步是指進程不需要一直等下去待诅,而是繼續(xù)執(zhí)行下面的操作叹坦,不管其他進程的狀態(tài)。當有消息返回時系統(tǒng)會通知進程進行處理卑雁,這樣可以提高執(zhí)行的效率募书。
舉個例子?比如:你叫我去吃飯测蹲,我聽到了就立刻和你去吃飯莹捡,如果我沒有聽到,你就會一直叫我扣甲,直到我聽見和你一起去吃飯篮赢,這個過程叫同步;
異步過程指你叫我去吃飯琉挖,然后你就去吃飯了启泣,而不管我是否和你一起去吃飯。而我得到消息后可能立即就走示辈,也可能過段時間再走寥茫。
如果我請你吃飯,就是同步矾麻,如果你請我吃飯就用異步纱耻,這樣你比較省錢。哈哈哈射富。膝迎。。
什么情況下使用同步胰耗?當多個線程需要訪問同一個資源時限次,它們需要以某種順序來確保該資源在某一特定時刻只能被一個線程所訪問,如果使用異步柴灯,程序的運行結(jié)果將不可預(yù)料卖漫。因此,在這種情況下赠群,就必須對數(shù)據(jù)進行同步羊始,即限制只能有一個進程訪問資源,其他線程必須等待查描。即必須得按順序來突委。
再說啥是進程的同步柏卤,在多道程序環(huán)境下,進程是并發(fā)執(zhí)行的匀油,不同進程之間存在著不同的相互制約關(guān)系缘缚。互相發(fā)送消息敌蚜、進行互相合作桥滨、互相等待,使得各進程按一定的速度執(zhí)行
舉個例子弛车?第一種情況齐媒,資源共享關(guān)系。各進程爭用一臺打印機纷跛,這時各進程使用這臺打印機時有一定的限制喻括。如各進程隨意使用打印機,會造成打印機結(jié)果交織在一起難以區(qū)分忽舟。所以必須由系統(tǒng)統(tǒng)一分配双妨,每次只允許一個進程使用一段時間打印機,等該進程使用完畢后再將打印機分配給其它進程叮阅。
第二種情況刁品,相互合作關(guān)系。一個程序的輸入浩姥、計算挑随、打印三個程序段作為三個進程并發(fā)執(zhí)行,由于這三個進程間存在著相互合作的關(guān)系勒叠,即先輸入再計算兜挨、最后再打印的關(guān)系,所以這三個進程在并發(fā)執(zhí)行時推進序列受到限制眯分,要保證其合作關(guān)系正確拌汇,進程間這種關(guān)系稱為同步關(guān)系