jvm採用了共享記憶體的方式進行執行緒通訊。即執行緒都擁有自己的工作記憶體空間,規定每次都要從主記憶體讀取資料,在自己的工作記憶體中進行操作,然後回寫到主記憶體。因為這樣的通訊方式,如果多個執行緒在交錯執行,就容易造成共享變數在某個執行緒中更新了,但是沒有回寫到主記憶體。從而引發併發問題
原子性:乙個操作不會因為執行緒排程而中斷。如基本型別的讀寫操作
如何造成:執行緒切換(復合操作)
解決方法:鎖語義、volatile語義(不能保證復合操作的)
可見性:某個執行緒修改了某個共享變數,其他執行緒能立刻得知該共享變數的新值
如何造成:指令重排序、執行緒切換、工作記憶體沒有即時重新整理主記憶體
解決方法:鎖語義、volatile語義、final語義
有序性:**按照順序執行
如何造成:指令重排序
jmm記憶體模型就是解決處理器優化重排序和快取一致性問題的乙個模型。那麼開發者就不需要關心底層細節如何實現,因為jmm封裝了底層實現,提供了如synchronized
,volatile
,final
等關鍵字來實現
JVM基礎知識(二)Java記憶體模型
volatile不需要加鎖,比synchronized更輕量級,不會阻塞執行緒 從記憶體可見性角度看,volatile讀相當於加鎖,volatile寫相當於解鎖。synchronized既能保證可見性,又能保證原子性 volatile只能保證可見性,無法保證原子性。退出同步塊 釋放監視器 重新整理緩...
NLP 揭秘馬爾可夫模型神秘面紗系列文章(二)
安德烈 馬爾可夫,俄羅斯人,物理 數學博士,聖彼得堡科學院院士,彼得堡數學學派的代表人物,以數論和概率論方面的工作著稱,他的主要著作有 概率演算 等。1878年,榮獲金質獎章,1905年被授予功勳教授稱號。馬爾可夫是彼得堡數學學派的代表人物。以數論和概率論方面的工作著稱。他的主要著作有 概率演算 等...
NLP 揭秘馬爾可夫模型神秘面紗系列文章(二)
2016年7月11日15 31 11 摘要 最早接觸馬爾可夫模型的定義源於吳軍先生 數學之美 一書,起初覺得深奧難懂且無什麼用場。直到學習自然語言處理時,才真正使用到隱馬爾可夫模型,並體會到此模型的妙用之處。馬爾可夫模型在處理序列分類時具體強大的功能,諸如解決 詞類標註 語音識別 句子切分 字素音位...