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