這些Java多執行緒面試題,你都明白了嗎?
2022-06-01由 metashops 發表于 農業
殺執行緒資料丟失怎麼解決
1、程序、執行緒、並行及併發是什麼?
程序
:就是一個應用程式,相當於一個軟體,如果殺掉一個程序,軟體就終止了
執行緒
:就是一個程序中的執行場景或一個執行單元,一個程序可以啟動多個執行緒
並行
:多個處理器或多核處理器同時處理多個任務
併發
:多個任務在同一個CPU核上,按細分的時間片輪流執行
2、實現執行緒的常用二種方式
第一種:編寫一類,直接繼承Java。lang。Thread,重寫run方法即可。
public class ThreadTest01 {
public static void main(String[] args) {
MyThread thread = new MyThread();
//start()作用是:啟動一個分支執行緒,在JVM中開闢一個新的棧空間,執行完,瞬間結束
//這段程式碼任務是開啟一個新的棧空間,只要新的棧空間開出來,start就結束,執行緒就啟動成功
//啟動成功執行緒會呼叫run方法,且run方法分支棧的棧低部(壓棧)
//run方法在分支棧的棧底,和main是平級的
thread。start();
for (int i = 0; i < 1000000000; i++) {
System。out。println(“主執行緒——->” + i);
}
}
}
class MyThread extends Thread {
@Override
public void run() {
System。out。println(“分支執行緒——->” + i);
第二種:編寫一類,實現Java。lang。Runnable介面,實現run方法即可。
使用匿名內部類建立執行緒
注:
實現Runnable和繼承Thread區別
使用實現Runnable介面的方式更能體現面向物件的程式設計思想
Runnable內部的程式碼可以被多個執行緒共享,適用於多個執行緒處理同一資源的情況
如果繼承Thread類,但是由於java單繼承的特性,此類不可再繼承其他類
3、run()方法和start()方法的區別
run()
方法不會啟動執行緒,不會分配新的分支棧,是單執行緒的(用於執行執行緒的執行程式碼,可重複呼叫)
start()
方法啟動一個分支執行緒,在JVM中開闢一個新的棧空間,執行完,瞬間結束
4、執行緒生命週期
(1)新建狀態:例項化執行緒的時候,也就是剛new出來的執行緒物件
(2)就緒狀態:new出來的執行緒物件後,呼叫start方法後,當一個執行緒搶到CPU時間片之後,它就開始執行run方法,如果run方法開始執行就標示著執行緒進入執行狀態。(就緒狀態:表示當前執行緒具有搶奪CPU時間片的權利,搶到時間片才能有執行權)
(3)執行狀態:run方法執行標示著這個執行緒進入執行狀態,如當前CPU時間片用完啦,會重新回到
就緒狀態
繼續搶奪時間片,搶到時間片,再重新進入run方法接著上一次的程式碼繼續 執行下去。
(4)死亡狀態:執行緒的run()方法執行完畢。
(5)阻塞狀態:當一個正在執行執行緒遇到某種情況下暫時放棄當前佔有的CPU時間片,同時也是暫停執行,就進入阻塞狀態。一旦執行緒甦醒後,會再次進入
就緒狀態
繼續搶奪CPU時間片。
5、如何獲取執行緒物件和名字及修改(瞭解即可)
主要講解如何獲取執行緒物件,如何獲取執行緒物件名字及如何修改執行緒物件的名字,程式碼如下。
6、多執行緒併發環境,如何確保資料安全問題
重點:專案執行在伺服器中,而伺服器已經幫我們將執行緒定義了,比如執行緒啟動、執行緒蠢建立等都已經給我們實現啦。
但是更重要等是,我們需要將專案放到一個多執行緒環境下執行,需要關注的是這些資料在多執行緒併發環境下,到底安全不安全。
7、什麼時候存線上程安全問題?
滿足以下三個條件,會存線上程安全:
多執行緒併發
有共享資料
共享資料有修改的行為
8、解決執行緒安全問題
使用“執行緒同步機制”也就是執行緒必須排序執行,說到執行緒同步,我們來了解什麼是
“非同步程式設計模型”和“同步程式設計模型”
。非同步程式設計模型其實就是
多執行緒併發(效率高)
,可以理解為各自執行緒執行各自的,無不干擾,而同步程式設計模型就是
執行緒排隊(效率低 )
,理解為t1執行緒執行時,必須等待t2執行緒執行結束才執行。
9、sleep()和wait()方法的區別?
(1)類的不同:sleep來自於Thread,而wait來自於object。
(2)釋放鎖:sleep不釋放鎖,而wait釋放鎖。
(3)用法不同:sleep時間到會自動恢復,wait可以用notify()或ontiftall直接喚醒。
注:notifyall()會喚醒所有執行緒,ontift喚醒一個執行緒。
寫作不易,如果幫到你記得來個三連【點贊+關注+分享】。如有錯誤,還請各位趕緊說句話,非常感謝!