一、執行緒池的底層怎麼實現的?
實現類為reentrantlock類,
有幾個重要的方法:
lock():加鎖,如果已經被獲取則等待
trylock():嘗試獲取鎖,獲取則返回true,否則false
trylock(long time,keepalivetime unit):在規定時間內獲取鎖
unlock();解鎖
lockinterruptly():如果執行緒正在等待釋放鎖,可以中斷這一過程
還有實現類reentrantreadwrite類
readlock():
writelock():
三、synchronized底層實現
jvm中物件的存放有三塊區域:物件頭、例項資料、對齊填充
物件頭:hashcode、分代年齡、鎖標記位
1、**塊的底層實現
對**塊新增synchronized關鍵字後,在底層jvm虛擬機器進行編譯時會在該**塊前後新增monitorenter和monitorexit
在執行monitorenter時,系統會獲取物件的物件頭中的monitor,獲取後將計數器記為1,表示加鎖,執行完到monitorexit減1,表示釋放鎖
如果在獲取monitorenter時失敗,那就要等待鎖被另乙個執行緒釋放。
2、方法的底層實現
對方法新增synchronized關鍵字後,在底層jvm虛擬機器中不是之前的monitor,而是acc_synchronized標識,jvm通過該標識辨別乙個方法是否為同步方法
部分面試題
1.請程式設計遍歷頁面上所有textbox控制項並給它賦值為string.empty?答 foreach system.windows.forms.control control in this.controls 2.請程式設計實現乙個氣泡排序演算法?答 int array new int int ...
部分面試題
1.廣播變數和driver 中定義的普通變數的區別 2.資料傾斜 優化的方式,怎樣定位問題,有什麼樣的解決方案,有沒有調參的方式能夠解決的 3.模型 1 怎樣評判彙總層的資料模型的好壞 2 怎樣應對業務變化 3 分層的原則 4.實時流join怎麼做的,採用實時流相互等待借助外部快取join,如果資料...
部分面試題
get與post 通訊的區別 get 請求能快取,post 不能 post 相對 get 安全一點點,因為get 請求都包含在 url 裡,且會被瀏覽器儲存歷史紀錄,post 不會,但是在抓包的情況下都是一樣的。post 可以通過 request body來傳輸比 get 更多的資料,get 沒有這...