java面試題之什麼是死鎖、活鎖、餓死和競態條件?
- 死鎖:是指兩個或兩個以上的程序(或執行緒)在執行過程中,因爭奪資源而造成的一種相互等待的現象,若無外力作用,他們將無法推進下去;
- 活鎖:是指兩個執行緒優先順序相同,都禮讓不走,就這樣一直僵持下去;
- 餓死:在單執行緒情況下,A、B兩個執行緒,A先執行;A在執行過程中,C執行緒來了,B讓C先執行;C在執行過程中,D執行緒來了,B也讓D先執行,就這樣B一直都是等待狀態。
- 競態條件:多個執行緒競爭同一個變數,導致資料的不正確性,執行緒的訪問順序是不可控的,會影響最終的結果。
產生死鎖的必要條件:
1、互斥使用(資源獨佔)
一個資源每次只能給一個程序使用(比如寫操作)
2、佔有且等待:
程序在申請新的資源的同時,保持對原有資源的佔有
3、不可搶佔:
資源申請者不能強行從資源佔有者手動奪取資源,資源只能由佔有者自願釋放
4、迴圈等待:
A等待B佔有的資源,B等待C佔有的資源,C等待D佔有的資源,..........N等待A的資源,形成一個執行緒等待迴路
相關推薦
java面試題之什麼是死鎖、活鎖、餓死和競態條件?
死鎖:是指兩個或兩個以上的程序(或執行緒)在執行過程中,因爭奪資源而造成的一種相互等待的現象,若無外力作用,他們將無法推進下去; 活鎖:是指兩個執行緒優先順序相同,都禮讓不走,就這樣一直僵持下去; 餓死:在單執行緒情況下,A、B兩個執行緒,A先執行;A在執行過程中
java面試題之死鎖產生的條件,以及如何避免死鎖,銀行家算法,產生死鎖後如何解決(阿裏面試題)
需求量 info 強行 進程 spa tro 否則 破壞 阻塞 死鎖產生的四個必要條件: 互斥:一個資源每次只能被一個進程使用(資源獨立) 請求與保持:一個進程因請求資源而阻塞時,對已獲得的資源保持不放(不釋放鎖) 不剝奪:進程已獲得的資源,在未使用之前,
java面試題之final、finalize和finally的區別
finally:finally是一個關鍵字,與try和catch一起用於異常的處理,finally塊一定會執行,無論在try快中是否有發生異常。 finalize:finalize方法是在物件被回收之前呼叫的方法,給物件自己最後一個復活的機會,但是什麼時候呼叫finalize沒有保證。
一道Java面試題之實現複製、刪除、剪下檔案(資料夾的實現)的snippet
Java面試題是叫寫出檔案複製、刪除和剪下的,所以昨天晚上就花了大概一個小時寫出這個完整的snippet(當然如果只要思路的話就好辦了)。 這個snippet中的刪除檔案(資料夾)部分有點意思,一般在Windows下目錄過長的話,目錄就刪除不了。而這個程式可以解決這個因
java面試題之int和Integer的區別
4條 試題 als 自動 數據類型 類型 fort spec 新建 int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本數據類型 2、Integer變量必須實例化後才能使用,而int變量不需要 3、Integer實際是對象的引用,
Java面試題之Java基礎
formate spa 多重繼承 輸出 不能 類名 gre collect extend 1、作用域public,private,protected,以及不寫時的區別 答:區別如下: 作用域 當前類 同一package 子孫類
java面試題之----HashMap常見面試題總結
使用 這一 hashtable 此刻 獲取 重要性 microsoft ria 取值 “你用過HashMap嗎?” “什麽是HashMap?你為什麽用到它?” 幾乎每個人都會回答“是的”,然後回答HashMap的一些特性,譬如HashMap可以接受null鍵值和值,而Has
java面試題之----mysql表優化方案
mysql 引擎 它的 易維 range 概述 .com 設置 常用 本文轉載自segmentfault,原文鏈接:https://segmentfault.com/a/1190000006158186。 當MySQL單表記錄數過大時,增刪改查性能都會急劇下降,可以參考以
java面試題之----jdbc中使用的設計模式(橋接模式)
connect @override 操作 tro orb his order ng- return 1.JDBC(JavaDatabase Connectivity) JDBC是以統一方式訪問數據庫的API. 它提供了獨立於平臺的數據庫訪問,也就是說,有了JDB
Java面試題:switch能否作用在byte、long、String上?
1.7 季節 spa name fault des lte false 枚舉類 switch可作用於char byte short int switch可作用於char byte short int對應的包裝類 switch不可作用於long double fl
那些java面試題之資料庫常問的!你會了多少!
資料庫裡面的索引和約束是什麼 用SQL語句實現oracle分頁查詢。 小編是一個有著5年工作經驗的java程式設計師,對於java,自己有做資料的整合,一個完整學習java的路線,學習資料和工具,相信這裡有很多學習java的小夥伴,我創立了一個20
java面試題之Thread的run()和start()方法有什麼區別
run()方法: 是在主執行緒中執行方法,和呼叫普通方法一樣;(按順序執行,同步執行) start()方法: 是建立了新的執行緒,在新的執行緒中執行;(非同步執行) public class App { public static void main( Stri
java面試題之sleep()和wait()方法的區別
sleep方法: 屬於Thread類中的方法;會導致程式暫停執行指定的時間,讓出cpu該其他執行緒,但是他的監控狀態依然保持著,當指定時間到了之後,又會自動恢復執行狀態;在呼叫sleep方法的過程中,執行緒不會釋放物件鎖。 wait方法: 屬於Object類中的方法;在呼叫wait方法的時候,執
java面試題之簡單介紹一下集合框架
klist linklist lin key 很多 array 們的 簡單 數據存儲 集合框架分為三塊:List列表、Set集合、Map映射 List列表在數據結構上可以被看做線性表,常用的有ArrayList和LinkList(不常用的有Vector(類似於Arra
java面試題之synchronized和lock有什麽區別
作用範圍 out inter mutex 虛擬 add moni 私有 p s synchronized和lock的區別: 類別 synchronized lock 存在層次 java的關鍵字,在jvm層面上 是一個類 鎖的釋放
Java面試題之執行緒
1、Thread類中的yield方法有什麼作用? Yield方法可以暫停當前正在執行的執行緒物件,讓其它有相同優先順序的執行緒執行。它是一個靜態方法而且只保證當前執行緒放棄CPU佔用而不能保證使其它執行緒一定能佔用CPU,執行yield()的執行緒有可能在進入到暫停狀態後馬上又
java面試題之二分查詢題型的解題策略《一》
/*二分查詢: 查詢元素對應的索引 前提:陣列有序,這點特別重要!!!要求的陣列一定要按照順序來的。 */ package day13.searchAlgorithm; public class binarySearch { public static v
java面試題之==和equlas的區別
面試失敗第一次 ==和equals的區別 java中的資料型別,可分為兩類: 1.基本資料型別 也稱原始資料型別。byte,short,char,int,long,float,double,boolean 原始資料型別之間的比較,應該用雙等號“==”,比較的是他
Java面試題--多執行緒併發&鎖&jvm
一 多執行緒、併發、鎖 執行緒的生命週期,狀態是如何轉移的 NEW:A thread that has not yet started is in this state. RUNABLE: A thread executing in the Java vi
Java面試題之Java基礎(一)
1、Java的幾種基本型別? byte、short、int、long、float、double、char、boolean; 2、什麼是字串常量池?String為什麼是不可變的? 字串常量池即儲存在Java堆記憶體中的字串池;字串的分配會耗費高昂的時間與空間代價。JVM為