2020年最新java練習(xí)題及答案

2020年最新java練習(xí)題及答案

深圳達(dá)內(nèi)教育      2022-03-28 09:50:01     9

2020年最新java練習(xí)題及答案,1、在java中守護(hù)線程和本地線程區(qū)別?java中的線程分為兩種:守護(hù)線程(Daemon)和用戶線程(User)。任何線程都可以設(shè)置為守護(hù)

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

    1、在java中守護(hù)線程和本地線程區(qū)別?

    java中的線程分為兩種:守護(hù)線程(Daemon)和用戶線程(User)。

    任何線程都可以設(shè)置為守護(hù)線程和用戶線程,通過方法Thread.setDaemon(boolon);true則把該線程設(shè)置為守護(hù)線程,反之則為用戶線程。Thread.setDaemon()必須在Thread.start()之前調(diào)用,否則運(yùn)行時(shí)會(huì)拋出異常。

    兩者的區(qū)別:

    虛擬機(jī)(JVM)何時(shí)離開,Daemon是為其他線程提供服務(wù),如果全部的UserThread已經(jīng)撤離,Daemon沒有可服務(wù)的線程,JVM撤離。也可以理解為守護(hù)線程是JVM自動(dòng)創(chuàng)建的線程(但不一定),用戶線程是程序創(chuàng)建的線程;比如JVM的垃圾回收線程是一個(gè)守護(hù)線程,當(dāng)所有線程已經(jīng)撤離,不再產(chǎn)生垃圾,守護(hù)線程自然就沒事可干了,當(dāng)垃圾回收線程是Java虛擬機(jī)上僅剩的線程時(shí),Java虛擬機(jī)會(huì)自動(dòng)離開。

    擴(kuò)展:ThreadDump打印出來的線程信息,含有daemon字樣的線程即為守護(hù)進(jìn)程,可能會(huì)有:服務(wù)守護(hù)進(jìn)程、編譯守護(hù)進(jìn)程、windows下的監(jiān)聽Ctrl+break的守護(hù)進(jìn)程、Finalizer守護(hù)進(jìn)程、引用處理守護(hù)進(jìn)程、GC守護(hù)進(jìn)程。

    2、線程與進(jìn)程的區(qū)別?

    進(jìn)程是操作系統(tǒng)分配資源的最小單元,線程是操作系統(tǒng)調(diào)度的最小單元。

    一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。

    3、什么是多線程中的上下文切換?

    多線程會(huì)共同使用一組計(jì)算機(jī)上的CPU,而線程數(shù)大于給程序分配的CPU數(shù)量時(shí),為了讓各個(gè)線程都有執(zhí)行的機(jī)會(huì),就需要輪轉(zhuǎn)使用CPU。不同的線程切換使用CPU發(fā)生的切換數(shù)據(jù)等就是上下文切換。

    4、死鎖與活鎖的區(qū)別,死鎖與饑餓的區(qū)別?

    死鎖:是指兩個(gè)或兩個(gè)以上的進(jìn)程(或線程)在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用,它們都將無法推進(jìn)下去。

    產(chǎn)生死鎖的必要條件:

    互斥條件:所謂互斥就是進(jìn)程在某一時(shí)間內(nèi)獨(dú)占資源。

    請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。

    不剝奪條件:進(jìn)程已獲得資源,在末使用完之前,不能強(qiáng)行剝奪。

    循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。

    活鎖:任務(wù)或者執(zhí)行者沒有被阻塞,由于某些條件沒有滿足,導(dǎo)致一直重復(fù)嘗試、失敗、嘗試、失敗。

    活鎖和死鎖的區(qū)別在于,處于活鎖的實(shí)體是在不斷的改變狀態(tài),所謂的“活”,而處于死鎖的實(shí)體表現(xiàn)為等待;活鎖有可能自行解開,死鎖則不能。

    饑餓:一個(gè)或者多個(gè)線程因?yàn)榉N種原因無法獲得所需要的資源,導(dǎo)致一直無法執(zhí)行的狀態(tài)。

    Java中導(dǎo)致饑餓的原因:

    高優(yōu)先級(jí)線程吞噬所有的低優(yōu)先級(jí)線程的CPU時(shí)間。

    線程被永久堵塞在一個(gè)等待進(jìn)入同步塊的狀態(tài),因?yàn)槠渌€程總是能在它之前持續(xù)地對(duì)該同步塊進(jìn)行訪問。

    線程在等待一個(gè)本身也處于永久等待完成的對(duì)象(比如調(diào)用這個(gè)對(duì)象的wait方法),因?yàn)槠渌€程總是被持續(xù)地獲得喚醒。

    5、Java中用到的線程調(diào)度算法是什么?

    采用時(shí)間片輪轉(zhuǎn)的方式。可以設(shè)置線程的優(yōu)先級(jí),會(huì)映射到下層的系統(tǒng)上面的優(yōu)先級(jí)上,如非特別需要,盡量不要用,防止線程饑餓。

    6、什么是線程組,為什么在Java中不推薦使用?

    ThreadGroup類,可以把線程歸屬到某一個(gè)線程組中,線程組中可以有線程對(duì)象,也可以有線程組,組中還可以有線程,這樣的組織結(jié)構(gòu)有點(diǎn)類似于樹的形式。

    為什么不推薦使用?因?yàn)橛泻芏嗟陌踩[患吧,如果需要使用,推薦使用線程池。

    7、為什么使用Executor框架?

    每次執(zhí)行任務(wù)創(chuàng)建線程newThread()比較消耗性能,創(chuàng)建一個(gè)線程是比較耗時(shí)、耗資源的。

    調(diào)用newThread()創(chuàng)建的線程缺乏管理,被稱為野線程,而且可以無限制的創(chuàng)建,線程之間的相互競爭會(huì)導(dǎo)致過多占用系統(tǒng)資源而導(dǎo)致系統(tǒng)癱瘓,還有線程之間的頻繁交替也會(huì)消耗很多系統(tǒng)資源。

    接使用newThread()啟動(dòng)的線程不利于擴(kuò)展,比如定時(shí)執(zhí)行、定期執(zhí)行、定時(shí)定期執(zhí)行、線程中斷等都不便實(shí)現(xiàn)。

 以上就是深圳達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“2020年最新java練習(xí)題及答案”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。