併發程式設計常見面試題總結一

2021-10-04 18:52:40 字數 751 閱讀 2156

目錄

一、synchronized用過麼?其原理是什麼?

二、什麼是可重入性,為什麼說synchronized是可重入鎖?

三、為什麼說synchronized是非公平鎖?

四、請談談可重入鎖的原理?

synchronized是由jvm虛擬機器實現的一種實現互斥同步的方式,被synchronized修飾後的程式塊編譯後的位元組碼檔案中,在編譯前後被編譯器生成了monitorenter和monitorexit兩個位元組碼指令。

可重入性是鎖的乙個基本要求,是為了解決自己鎖死自己的情況。如果乙個類中的同步方法method2呼叫另乙個同步方法method1 ,假如 synchronized 不支援重入,進入 method2 方法時當前執行緒獲得鎖,method2 方法裡面執行 method1 時當前執行緒又要去嘗試獲取鎖,對 synchronized 來說,可重入性是顯而易見的,在執行 monitorenter 指令時,如果這個物件沒有鎖定,或者當前執行緒已經擁有鎖時如果不支援重入,它就要等其他執行緒釋放鎖,而把自己阻塞,導致自己鎖死自己。有了這個物件的鎖(而不是已擁有了鎖則不能繼續獲取),就把鎖的計數器 +1,其實本質上就通過這種方式實現了可重入性。

非公平主要表現在獲取鎖的行為上,並非是按照申請鎖的時間先後順序給等待的執行緒分配鎖資源,每當有執行緒使用鎖後,由cpu排程,每乙個執行緒都有機會競爭獲取鎖資源,包括剛剛釋放鎖的執行緒,也有可能再次獲取這個鎖物件,並不是佇列中等待最久的執行緒就獲取到鎖。這樣做的目的是為了提高執行效能,缺點就是可能會產生執行緒飢餓現象。

常見面試題一

1.下列程式在32位 linux 或unix 中的結果是什麼?func char str main 答 10 4 9 這個也就是說sizeof 來計算的時候,要在字串後面加乙個 0,而 strlen 不加。其他str 為乙個指標,故 sizeof str 為4 2 在c 的內中定義訪問函式,即是在這...

網路程式設計常見面試題

1.四層網路模型和七層網路模型 四層網路模型 a.應用層 應用程式間溝通的層,如簡單電子郵件傳輸 smtp 檔案傳輸協議 ftp 網路遠端訪問協議 telnet 等。b.傳輸層 在此層中,它提供了節點間的資料傳送服務,如傳輸控制協議 tcp 使用者資料報協議 udp 等,tcp和 udp給資料報加入...

IT 常見面試題總結2

001 輸入一行字元,統計其中有多少個單詞,單詞之間用空格分隔開 include includeint main else if word 0 printf d num 使得dos介面不閃屏 int in scanf d in return 0 002 函式指標的應用 輸入兩個整數,當使用者輸入1,...