1、什么是線程?
定義:線程是程序中的執行路徑,是操作系統進行調度的基本單位。它允許程序并發執行多個任務,提高程序的響應速度和資源利用率。
2、為什么需要線程?
1、提高并發性:線程允許程序同時執行多個任務,充分利用CPU資源。
2、提高響應速度:多線程可以處理用戶輸入、繪制圖形、播放音樂等任務,使得程序更加流暢和響應迅速。
3、節約系統資源:相對于進程,線程的創建和銷毀開銷較小,可以更有效地利用系統資源。
3、線程和進程的區別是什么?
1、獨立性:進程擁有獨立的內存空間和系統資源,而線程是進程中的一個實體,共享進程的內存空間和系統資源。
2、資源占用:進程是資源分配的基本單位,而線程是調度執行的基本單位。線程比進程更輕量,創建和銷毀的開銷更小。
3、并發性:多個線程可以并發執行在同一個進程內,而多個進程則無法直接共享內存和資源。
4、 創建線程有幾種方式?它們的優缺點
1、繼承Thread類
優點:簡單直觀。
缺點:類的繼承性受限,無法再繼承其他類。
2、實現Runnable接口
優點:可以避免Java的單繼承特性帶來的局限,多個線程可以共享同一個Runnable實例。
缺點:相對于繼承Thread類,實現接口的方式稍微復雜一些。
3、實現Callable接口
優點:可以獲得執行結果,但需要借助ExecutorService執行器來啟動線程。
缺點:相對于Runnable接口,實現Callable接口的方式更復雜一些。
5、run和start的區別是什么?
1、run方法:直接調用run方法并沒有創建線程,而是在原來的線程中執行的代碼。
2、start方法:調用start方法則是創建了線程,并在新線程中執行代碼(與原來的線程并發執行)。
6、Java線程的狀態有哪些?
NEW:線程對象已經創建,尚未啟動。
RUNNABLE:線程已經啟動,正在運行或準備運行。
BLOCKED:等待鎖的時候進入的狀態。
WAITING:特殊的阻塞狀態,等待其他線程執行特定的操作。
TIMED_WAITING:線程等待另一個線程執行特定操作,但有一個時間限制。
TERMINATED:線程已經執行完畢或被中斷。
7、同步和異步的區別是什么?
同步:多個線程在同一時間段內訪問共享資源時,只有一個線程能夠占用資源,其他線程必須等待。
異步:多個線程在不同時間段內訪問共享資源時,各自單獨占用資源,不存在競爭問題。