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

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

更新時間:2020-09-29 來源:黑馬程序員 瀏覽量:

(1)問題分析:

考官主要想對線程方面的考核,如線程的生命周期、線程安全問題等。

(2)核心答案講解

通過繼承Thread類實現(xiàn),多個線程之間無法共享該線程類的實例變量。

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

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

創(chuàng)建線程池實現(xiàn),線程池提供了一個線程隊列,隊列中保存所有等待狀態(tài)的線程,避免創(chuà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è)務調(diào)度系統(tǒng)邏輯,具體需求如下:

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

2)有三種對應類型的客戶:VIP客戶,普通客戶,快速客戶(辦理如交水電費、電話費之類業(yè)務的客戶)。

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

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

5)各類型客戶在其對應窗口按順序依次辦理業(yè)務。

6)當VIP(6號)窗口和快速業(yè)務(5號)窗口沒有客戶等待辦理業(yè)務的時候,這兩個窗口可以處理普通客戶的業(yè)務,而一旦有對應的客戶等待辦理業(yè)務的時候,則優(yōu)先處理對應客戶的業(yè)務。

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

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

猜你喜歡:

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

JavaSE線程池超全視頻教程 

Swing頂級容器:JFrame和JDialog介紹 

realm中怎么使用散列算法? 

Java高級軟件工程師課程 



分享到:
在線咨詢 我要報名
和我們在線交談!