從軟件的角度來說,并發(fā)
就是在一段時(shí)間內(nèi)以交替的方式去完成多個(gè)任務(wù),而并行
就是以齊頭并進(jìn)的方式去完成多個(gè)任務(wù)。
從硬件的角度來說,在一個(gè)處理器一次只能夠運(yùn)行一個(gè)線程的情況下,并發(fā)
可以有一個(gè)處理器通過使用時(shí)間片分配的方式實(shí)現(xiàn),而并行
則需要靠多個(gè)處理器在同一時(shí)刻各自運(yùn)行一個(gè)線程來實(shí)現(xiàn)。
多線程的實(shí)質(zhì)就是實(shí)現(xiàn)并發(fā)化
。
守護(hù)線程是運(yùn)行在后臺的一種特殊進(jìn)程。它獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。在Java中垃圾回收線程就是特殊的守護(hù)線程。
04. 創(chuàng)建線程有哪幾種方式?Java標(biāo)準(zhǔn)庫類java.lang.Thread就是Java平臺對線程的實(shí)現(xiàn) 。Thread類或其子類的一個(gè)實(shí)例就是一個(gè)線程。
多線程的實(shí)現(xiàn)方式有兩類:
備注:Thread類的兩個(gè)常用構(gòu)造器是:Thread()和Thread(Runnable target)。相應(yīng)地,Java語言種創(chuàng)建線程的有兩種常用方式。一種是使用第一個(gè)構(gòu)造器:定義Thread類的子類,在該子類種覆蓋(Override)run方法并在該方法種實(shí)現(xiàn)線程任務(wù)處理邏輯;另一種是使用第二個(gè)構(gòu)造器:創(chuàng)建一個(gè)java.lang.Runnable接口的實(shí)例,并在該實(shí)例的run方法種實(shí)現(xiàn)任務(wù)處理邏輯,然后以該Runnable接口實(shí)例作為構(gòu)造器的參數(shù)直接創(chuàng)建(new)一個(gè)Thread類的實(shí)例。
但是不管是采用哪種方式創(chuàng)建線程,一旦線程的run方法被執(zhí)行(由Java虛擬機(jī)調(diào)用)結(jié)束,相應(yīng)的線程的運(yùn)行也就結(jié)束了。其中run方法執(zhí)行結(jié)束包括正常結(jié)束(run方法返回)以及代碼中拋出異常而導(dǎo)致的中止。
線程屬于“一次性用品”,start方法也只能被調(diào)用一次,多次調(diào)用同一個(gè)Thread實(shí)例的start方法會導(dǎo)致拋出IllegalThreadStateException異常。
在Java平臺中,一個(gè)線程就是一個(gè)對象,Java虛擬機(jī)會為每個(gè)線程分配調(diào)用棧(Call Stack)所需的內(nèi)存空間。調(diào)用棧用于跟蹤Java代碼(方法)間的調(diào)用關(guān)系以及Java代碼對本地代碼(Native Code,通常是C代碼)的調(diào)用。另外Java平臺中每個(gè)線程可能還有一個(gè)內(nèi)核線程與之對應(yīng)。
Java平臺中的任意一段代碼總是由確定的線程負(fù)責(zé)執(zhí)行的,這個(gè)線程就相應(yīng)地被稱為這段代碼的執(zhí)行線程
。同一段代碼可以被多個(gè)線程執(zhí)行。
如果沒有啟動線程而是在應(yīng)用代碼中直接調(diào)用線程的run方法的話,那么這個(gè)線程的run方法其實(shí)運(yùn)行在當(dāng)前線程(即run方法的調(diào)用方代碼的執(zhí)行線程)之中而不是運(yùn)行在其自身線程中,從而違背了創(chuàng)建線程的初衷。
Thread類所實(shí)現(xiàn)的
05. runnable和callable的區(qū)別是什么?首先,它們都是接口。其次,Runnable接口中的run()方法的返回值是void,它做的事情只是純粹地去執(zhí)行run()方法中的代碼而已;然而,Callable接口中的call()方法是有返回值的,是一個(gè)泛型,和Future、FutureTask配合可以用來獲取異步執(zhí)行的結(jié)果。
06. 簡述JDK、JRE、JVM之間的關(guān)系答:JDK是一套編寫Java應(yīng)用程序的工具包,也就是一個(gè)Java程序開發(fā)環(huán)境。包括Java的運(yùn)行環(huán)境,也就是JRE。Java虛擬機(jī),即JVM運(yùn)行在JRE中,屬于Java應(yīng)用程序運(yùn)行的載體。
07. 描述一下類加載機(jī)制的含義和過程答:這里完整的描述應(yīng)該是Java虛擬機(jī)把描述類的數(shù)據(jù)從class文件加載到內(nèi)存的過程,這里邊包含多個(gè)步驟,包括:類文件的加載,數(shù)據(jù)的校驗(yàn)、變量的解析以及初始化,并最終將符號引用轉(zhuǎn)換為直接引用,最終使用。這些過程都是在Java運(yùn)行期間進(jìn)行的。其中“通過一個(gè)類的全限定名來獲取此類的二進(jìn)制字節(jié)流”的代碼稱為“類加載器”,類加載器依據(jù)雙親委派原則進(jìn)行類的加載。
08. 說說你對Run-time Data Areas的理解答:從官網(wǎng)來看,Java運(yùn)行時(shí)數(shù)據(jù)區(qū)包括pc寄存器、Java虛擬機(jī)棧、堆、方法區(qū)、運(yùn)行時(shí)常量池以及本地方法棧。其中pc寄存器用來存儲線程執(zhí)行的字節(jié)碼的行號,Java虛擬機(jī)棧用來維護(hù)局部變量和結(jié)果的調(diào)用和方法返回,堆是存儲所有對象及其實(shí)例變量的內(nèi)存區(qū)域,而方法區(qū)存儲的是類的元數(shù)據(jù)信息,包括元數(shù)據(jù)、常量池、靜態(tài)變量、字段以及方法,運(yùn)行時(shí)常量池,即constant_pool相當(dāng)于符號表,用于解析變量方法和字段;本地方法棧用來為虛擬機(jī)使用到的Native方法服務(wù)。這里重點(diǎn)是Java虛擬機(jī)棧、Heap和方法區(qū)
09.分布式系統(tǒng)的設(shè)計(jì)目標(biāo):你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
文章標(biāo)題:【Java】Java開發(fā)工程師面試題目-創(chuàng)新互聯(lián)
文章路徑:http://vcdvsql.cn/article38/csejpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、響應(yīng)式網(wǎng)站、App開發(fā)、網(wǎng)站收錄、軟件開發(fā)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容