全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

Java中如何創(chuàng)建線(xiàn)程?【Java面試題】

更新時(shí)間:2020-09-29 來(lái)源:黑馬程序員 瀏覽量:

(1)問(wèn)題分析:

考官主要想對(duì)線(xiàn)程方面的考核,如線(xiàn)程的生命周期、線(xiàn)程安全問(wèn)題等。

(2)核心答案講解

通過(guò)繼承Thread類(lèi)實(shí)現(xiàn),多個(gè)線(xiàn)程之間無(wú)法共享該線(xiàn)程類(lèi)的實(shí)例變量。

實(shí)現(xiàn)Runnable接口,較繼承Thread類(lèi),避免繼承的局限性,適合資源共享。

使用Callable,方法中可以有返回值,并且拋出異常。

創(chuàng)建線(xiàn)程池實(shí)現(xiàn),線(xiàn)程池提供了一個(gè)線(xiàn)程隊(duì)列,隊(duì)列中保存所有等待狀態(tài)的線(xiàn)程,避免創(chuàng)建與銷(xiāo)毀額外開(kāi)銷(xiāo),提高了響應(yīng)速度。

(3)問(wèn)題擴(kuò)展:

線(xiàn)程的生命周期:線(xiàn)程要經(jīng)歷新建、就緒、運(yùn)行(活動(dòng))、阻塞和死亡五種不同的狀態(tài)。這五種狀態(tài)都可以通過(guò)Thread類(lèi)中的方法進(jìn)行控制。
① 新建狀態(tài):使用new 操作符創(chuàng)建一個(gè)線(xiàn)程后,該線(xiàn)程僅僅是一個(gè)空對(duì)象,這時(shí)的線(xiàn)程處于創(chuàng)建狀態(tài)。
② 就緒狀態(tài):使用start()方法啟動(dòng)一個(gè)線(xiàn)程后,系統(tǒng)為該線(xiàn)程分配了除CPU外的所需資源,使該線(xiàn)程處于就緒狀態(tài)。
③ 運(yùn)行狀態(tài):系統(tǒng)真正執(zhí)行線(xiàn)程的run()方法。
④ 阻塞和喚醒線(xiàn)程阻塞狀態(tài):使用sleep(),wait()方法進(jìn)行操作。
⑤ 死亡狀態(tài):線(xiàn)程執(zhí)行了interrupt()或stop()方法,那么它也會(huì)以異常退出的方式進(jìn)入死亡狀態(tài)。

線(xiàn)程安全問(wèn)題:使用synchronized聲明同步或使用鎖lock,Lock使用起來(lái)比較靈活,但需要手動(dòng)釋放和開(kāi)啟,采用synchronized不需要用戶(hù)去手動(dòng)釋放鎖。

(4)結(jié)合項(xiàng)目中使用:

模擬實(shí)現(xiàn)銀行業(yè)務(wù)調(diào)度系統(tǒng)邏輯,具體需求如下:

1)銀行內(nèi)有6個(gè)業(yè)務(wù)窗口,1 - 4號(hào)窗口為普通窗口,5號(hào)窗口為快速窗口,6號(hào)窗口為VIP窗口。

2)有三種對(duì)應(yīng)類(lèi)型的客戶(hù):VIP客戶(hù),普通客戶(hù),快速客戶(hù)(辦理如交水電費(fèi)、電話(huà)費(fèi)之類(lèi)業(yè)務(wù)的客戶(hù))。

3)異步隨機(jī)生成各種類(lèi)型的客戶(hù),生成各類(lèi)型用戶(hù)的概率比例為:VIP客戶(hù) :普通客戶(hù) :快速客戶(hù) = 1 :6 :3。

4)客戶(hù)辦理業(yè)務(wù)所需時(shí)間有最大值和最小值,在該范圍內(nèi)隨機(jī)設(shè)定每個(gè)VIP客戶(hù)以及普通客戶(hù)辦理業(yè)務(wù)所需的時(shí)間,快速客戶(hù)辦理業(yè)務(wù)所需時(shí)間為最小值(提示:辦理業(yè)務(wù)的過(guò)程可通過(guò)線(xiàn)程Sleep的方式模擬)。

5)各類(lèi)型客戶(hù)在其對(duì)應(yīng)窗口按順序依次辦理業(yè)務(wù)。

6)當(dāng)VIP(6號(hào))窗口和快速業(yè)務(wù)(5號(hào))窗口沒(méi)有客戶(hù)等待辦理業(yè)務(wù)的時(shí)候,這兩個(gè)窗口可以處理普通客戶(hù)的業(yè)務(wù),而一旦有對(duì)應(yīng)的客戶(hù)等待辦理業(yè)務(wù)的時(shí)候,則優(yōu)先處理對(duì)應(yīng)客戶(hù)的業(yè)務(wù)。

7)隨機(jī)生成客戶(hù)時(shí)間間隔以及業(yè)務(wù)辦理時(shí)間最大值和最小值自定,可以設(shè)置。

8)不要求實(shí)現(xiàn)GUI,只考慮系統(tǒng)邏輯實(shí)現(xiàn),可通過(guò)Log方式展現(xiàn)程序運(yùn)行結(jié)果。

猜你喜歡:

單例模式介紹:懶漢和餓漢代碼

JavaSE線(xiàn)程池超全視頻教程 

Swing頂級(jí)容器:JFrame和JDialog介紹 

realm中怎么使用散列算法? 

Java高級(jí)軟件工程師課程 



分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!