更新時(shí)間:2020-09-29 來源:黑馬程序員 瀏覽量:
(1)問題分析:
考官主要想對(duì)線程方面的考核,如線程的生命周期、線程安全問題等。
(2)核心答案講解:
通過繼承Thread類實(shí)現(xiàn),多個(gè)線程之間無法共享該線程類的實(shí)例變量。
實(shí)現(xiàn)Runnable接口,較繼承Thread類,避免繼承的局限性,適合資源共享。
使用Callable,方法中可以有返回值,并且拋出異常。
創(chuàng)建線程池實(shí)現(xiàn),線程池提供了一個(gè)線程隊(duì)列,隊(duì)列中保存所有等待狀態(tài)的線程,避免創(chuàng)建與銷毀額外開銷,提高了響應(yīng)速度。
(3)問題擴(kuò)展:
線程的生命周期:線程要經(jīng)歷新建、就緒、運(yùn)行(活動(dòng))、阻塞和死亡五種不同的狀態(tài)。這五種狀態(tài)都可以通過Thread類中的方法進(jìn)行控制。
① 新建狀態(tài):使用new
操作符創(chuàng)建一個(gè)線程后,該線程僅僅是一個(gè)空對(duì)象,這時(shí)的線程處于創(chuàng)建狀態(tài)。
②
就緒狀態(tài):使用start()方法啟動(dòng)一個(gè)線程后,系統(tǒng)為該線程分配了除CPU外的所需資源,使該線程處于就緒狀態(tài)。
③ 運(yùn)行狀態(tài):系統(tǒng)真正執(zhí)行線程的run()方法。
④
阻塞和喚醒線程阻塞狀態(tài):使用sleep(),wait()方法進(jìn)行操作。
⑤
死亡狀態(tài):線程執(zhí)行了interrupt()或stop()方法,那么它也會(huì)以異常退出的方式進(jìn)入死亡狀態(tài)。
線程安全問題:使用synchronized聲明同步或使用鎖lock,Lock使用起來比較靈活,但需要手動(dòng)釋放和開啟,采用synchronized不需要用戶去手動(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)類型的客戶:VIP客戶,普通客戶,快速客戶(辦理如交水電費(fèi)、電話費(fèi)之類業(yè)務(wù)的客戶)。
3)異步隨機(jī)生成各種類型的客戶,生成各類型用戶的概率比例為:VIP客戶 :普通客戶 :快速客戶 = 1 :6 :3。
4)客戶辦理業(yè)務(wù)所需時(shí)間有最大值和最小值,在該范圍內(nèi)隨機(jī)設(shè)定每個(gè)VIP客戶以及普通客戶辦理業(yè)務(wù)所需的時(shí)間,快速客戶辦理業(yè)務(wù)所需時(shí)間為最小值(提示:辦理業(yè)務(wù)的過程可通過線程Sleep的方式模擬)。
5)各類型客戶在其對(duì)應(yīng)窗口按順序依次辦理業(yè)務(wù)。
6)當(dāng)VIP(6號(hào))窗口和快速業(yè)務(wù)(5號(hào))窗口沒有客戶等待辦理業(yè)務(wù)的時(shí)候,這兩個(gè)窗口可以處理普通客戶的業(yè)務(wù),而一旦有對(duì)應(yīng)的客戶等待辦理業(yè)務(wù)的時(shí)候,則優(yōu)先處理對(duì)應(yīng)客戶的業(yè)務(wù)。
7)隨機(jī)生成客戶時(shí)間間隔以及業(yè)務(wù)辦理時(shí)間最大值和最小值自定,可以設(shè)置。
8)不要求實(shí)現(xiàn)GUI,只考慮系統(tǒng)邏輯實(shí)現(xiàn),可通過Log方式展現(xiàn)程序運(yùn)行結(jié)果。
猜你喜歡:
Swing頂級(jí)容器:JFrame和JDialog介紹