1. 原子性
- read, load, assign, use, store write
- 基本型別的訪問,讀寫(long, double 非原子性協定)
- monitorenter, monitorexit (jvm) ; lock, unlock, synchronized
2. 可見性
- volatile
- synchronized (對乙個變數執行unlock操作之前,必須吧此變數同步回主記憶體中(store, write)
- final (在構造器中初始化完成後,並且構造器沒有把「this」的引用傳遞出去(避免半初始化狀態),其他執行緒可見;)
3. 有序性
- volatile(禁止指令重排)
- synchronize(持有同乙個鎖的兩個同步**塊只能序列地進行)
關於原子性, 可見性,有序性的思考
原子性是指 不會有中間狀態存在,要麼什麼都沒改變,要麼全都改變 對資料操作的原子性 在併發程式設計中,原子性存在的根本原因是,多個執行緒操作共享變數,由於執行緒間切換排程,導致乙個執行緒操作了另乙個執行緒 半成品 的資料,這是導致多執行緒環境下結果不可 的乙個原因.synchronized 的原子性...
volatile,可見性,有序性
1.可見性的實現基於volatile的讀取,寫入兩個操作的記憶體語義。2.有序性的實現基於jmm針對編譯器制定的volatile重排序表 能否重排序 第二個操作 第乙個操作 普通讀 寫 volatile讀 volatile寫 普通讀 寫 novolatile讀 nono novolatile寫 no...
可見性 原子性和有序性問題
核心矛盾 這些年,我們的 cpu 記憶體 i o 裝置都在不斷迭代,不斷朝著更快的方向努力。但是,在這個快速發展的過程中,有乙個核心矛盾一直存在,就是這三者的速度差異。我形象的描述了一下這三者的速度上的差異 所謂天上一天地上一年 愛因斯坦的相對論是有合理解釋的 cpu和記憶體之間的速度差異就是cpu...