Java 中的執行緒 thread

Etan.Chen發表於2020-06-21

一、問:執行緒有哪些狀態?

new, runnable, running, waiting, dead

執行緒狀態間的流轉

二、問:執行緒實現方式?

  1. 實現 Runnable 介面,然後new Thread, 將實現的類物件傳入Thread 建構函式
  2. 繼承Thread (細心同學會發現,Thread本身就是實現Runnable 介面)

三、問:舉個執行緒死鎖的例子

A: 你先給我錢,我就給你貨
B: 你先給我貨,我就給你錢

四、問:執行緒使用場景?

  1. 常見的瀏覽器、Web服務(現在寫的web是中介軟體幫你完成了執行緒的控制),web處理請求,各種專用伺服器(如遊戲伺服器)
  2. servlet多執行緒
  3. FTP下載,多執行緒操作檔案
  4. 資料庫用到的多執行緒
  5. 分散式計算
  6. tomcat,tomcat內部採用多執行緒,上百個客戶端訪問同一個WEB應用,tomcat接入後就是把後續的處理扔給一個新的執行緒來處理,這個新的執行緒最後呼叫我們的servlet程式,比如doGet或者doPost方法
  7. 後臺任務:如定時向大量(100W以上)的使用者傳送郵件;定期更新配置檔案、任務排程(如quartz),一些監控用於定期資訊採集
  8. 自動作業處理:比如定期備份日誌、定期備份資料庫
  9. 非同步處理:如發微博、記錄日誌
  10. 頁面非同步處理:比如大批量資料的核對工作(有10萬個手機號碼,核對哪些是已有使用者)
  11. 資料庫的資料分析(待分析的資料太多),資料遷移
  12. 多步驟的任務處理,可根據步驟特徵選用不同個數和特徵的執行緒來協作處理,多工的分割,由一個主執行緒分割給多個執行緒完成
    等等

五、使用執行緒應該注意什麼?

執行緒安全

執行緒安全是一個很寬泛的說明,簡單舉例如下:

  1. 共享資料處理先後順序
  2. 資源競爭導致‘死鎖’
  3. 執行緒脫離監控: 執行緒新建和執行脫離管控,導致整個系統異常

相關文章