[TOC](【後端面經-Java】Java創建線程的方法簡介) ## 1. 線程的基本概念 ### 1.1 線程 學過操作系統的同學應該不陌生,線程是電腦中的最小調度單元,一個進程可以有多個線程,執行併發操作,提高任務的運行效率 ### 1.2 線程狀態和生命周期 1. 線程狀態包括: - **新 ...
目錄
1. 線程的基本概念
1.1 線程
學過操作系統的同學應該不陌生,線程是電腦中的最小調度單元,一個進程可以有多個線程,執行併發操作,提高任務的運行效率
1.2 線程狀態和生命周期
- 線程狀態包括:
- 新建(new):線程創建而尚未啟動的階段;
- 就緒態(runnable/ready):線程已經啟動,等到CPU資源分配
- 運行態(running):線程分配到CPU資源,正式運動
- 阻塞態(blocked):在運行過程中由於存在資源缺乏等原因,進入阻塞態等到資源條件滿足,再次執行;
- 等待態(waiting):線程進入I/O等操作或者線程執行 sleep()、join() 或 wait(timeout) 方法時,,等待響應,這時候進入等待態,其他線程可接著執行;
- 超時等待(timed waiting):線程進入超時等待態類似於等待態,但是有時間限制,等待時間到了,線程會自動進入就緒態,等待CPU資源調度;
- 終止態(terminated):線程執行完畢或者出現異常,進入終止態,線程生命周期結束。
- 線程生命周期如圖所示:
- 3. 阻塞態 vs 等待態
- 阻塞態:因為某些資源問題而引起,線程在阻塞態的時候,其他線程無法執行。
- 等待態: 一般不是由於資源問題而是線程本身的操作而引起,線程在等待態的時候,其他線程可以執行。
2. 創建線程的四種方法
2.1 繼承Thread類
Java.lang.Thread
類是java的線程類,類中包括一些線程基本信息和線程操作函數,通過對Thread類的繼承,重寫run()
方法,可以實現線程的創建。
2.2 實現Runnable介面
不繼承Thread類
,而是初始化Thread類
,實現Runnable介面
,實現線程的創建。
2.3 實現Callable介面
Callable介面
和Runnable介面
類似,都是實現線程的創建,Callable介面
可接受結果(有返回值),且可以檢查異常。
2.4 使用線程池
使用線程池創建線程的優點如下所示:
- 減少每個任務的調用開銷
- 提供一種可行方法,限制和管理系統資源消耗
- 能夠提高線程非同步執行的性能
兩種創建方式:
- ThreadPoolExecutor
- Executors
註:關於具體的代碼解釋,以後有機會再補充,各位也可以根據下麵的參考博客進行學習。