一、問:執行緒有哪些狀態?
new, runnable, running, waiting, dead
執行緒狀態間的流轉
二、問:執行緒實現方式?
- 實現 Runnable 介面,然後new Thread, 將實現的類物件傳入Thread 建構函式
- 繼承Thread (細心同學會發現,Thread本身就是實現Runnable 介面)
三、問:舉個執行緒死鎖的例子
A: 你先給我錢,我就給你貨
B: 你先給我貨,我就給你錢
四、問:執行緒使用場景?
- 常見的瀏覽器、Web服務(現在寫的web是中介軟體幫你完成了執行緒的控制),web處理請求,各種專用伺服器(如遊戲伺服器)
- servlet多執行緒
- FTP下載,多執行緒操作檔案
- 資料庫用到的多執行緒
- 分散式計算
- tomcat,tomcat內部採用多執行緒,上百個客戶端訪問同一個WEB應用,tomcat接入後就是把後續的處理扔給一個新的執行緒來處理,這個新的執行緒最後呼叫我們的servlet程式,比如doGet或者doPost方法
- 後臺任務:如定時向大量(100W以上)的使用者傳送郵件;定期更新配置檔案、任務排程(如quartz),一些監控用於定期資訊採集
- 自動作業處理:比如定期備份日誌、定期備份資料庫
- 非同步處理:如發微博、記錄日誌
- 頁面非同步處理:比如大批量資料的核對工作(有10萬個手機號碼,核對哪些是已有使用者)
- 資料庫的資料分析(待分析的資料太多),資料遷移
- 多步驟的任務處理,可根據步驟特徵選用不同個數和特徵的執行緒來協作處理,多工的分割,由一個主執行緒分割給多個執行緒完成
等等
五、使用執行緒應該注意什麼?
執行緒安全
執行緒安全是一個很寬泛的說明,簡單舉例如下:
- 共享資料處理先後順序
- 資源競爭導致‘死鎖’
- 執行緒脫離監控: 執行緒新建和執行脫離管控,導致整個系統異常