java併發程式設計的三大問題

2021-09-12 12:37:08 字數 388 閱讀 7296

背景:

計算機處理速度:cpu > 記憶體 > io

為了平衡三者的速度差異:cpu 增加了快取;作業系統增加了程序、執行緒,以分時復用 cpu;編譯程式優化指令執行次序

可見性:乙個執行緒對共享變數的修改,另外乙個執行緒能夠立刻看到

原子性:乙個或者多個操作在 cpu 執行的過程中不被中斷的特性

1、快取導致的可見性問題,如cpu快取,快取的時差性導致資料對其他執行緒不可見

2、執行緒切換帶來的原子性問題,如count += 1是由三個原子指令組成

3、編譯優化帶來的有序性問題,如雙重檢查建立單例,可能取到已分配記憶體位址、未初始化的單例(new指令3步操作,①分記憶體②初始化③賦值給引用變數,可能會發生①③②的重排序)

快取常見三大問題

之前常聽人說,但是沒有仔細想過這些問題。最近看 可伸縮服務架構 架構與中介軟體 中這些問題解釋的很好,也給出了一般解決方案,記錄一下。快取穿透 快取併發 快取雪崩常見的由於併發量大而導致。說明 快取穿透指的是使用不存在的key進行大量的高併發查詢,這導致快取無法命中,每次請求都要穿透到後端資料庫系統...

圍繞DOM的三大問題

在對web頁面操作時,有以下3個關於dom的問題 1 何時開始操作dom對物件。只有在dom樹生成結束,我們才能對dom物件進行操作。當載入頁面內容時,除了或樣式是另開程序進行載入,其他內容都要一步一步序列載入,將每個標籤都解析為dom樹的結點,直至最終生成能夠代表整個頁面的dom樹。而如何判斷do...

併發程式設計的三大特性

1 原子性 對於成員變數a來說,如果執行緒a執行以下操作 a 此時需要分三步執行 1 讀取a的值 2 將a的值加1 3 將加1後的值賦給a 在執行以上三步過程中,如果另乙個執行緒b對a進行了操作,那麼就不能保證原子性了。要保證原子性,可以加鎖,如synchronized 2 可見性 要理解可見性,需...