java記憶體模型

2021-09-18 06:11:12 字數 893 閱讀 8886

private volatile string a;
//鎖的是當前物件

public synchronized void test(){}

//鎖的是類(.class)

public static synchronized void test1(){}

//這裡鎖的是this 也就是當前物件

public void test3()

}

// 以下**jmm就會在常量池中查詢"lantao"是否存在,如果存在則將位址賦值給a,如果不存在則先建立乙個儲存在常量池中然後將位址賦值給a;

string a = "lantao";

// 以下**會建立你string物件,區別就是

//1-建立string物件;

//2-在常量池中查;找"lantao",如果存在則賦值給1,如果不存在則在常量池中建立'lantao'再將位址賦值給1;

string b = new string("lantao");

// 所以 這裡是 false ,因為位址不一樣,

// b的位址指向的是 heap 中的string,string物件在只指向常量池中的'lantao'

// a的位址是直接指向 常量池中的'lanntao'

java記憶體模型

一 原子性 原子性是指乙個操作是不可中斷的,即使是多個執行緒一起執行的時候,乙個操作的開始,就不會被其他執行緒干擾 那麼有人會想到 i 是原子操作嗎?答案肯定不是。因為i 至少包含兩個操作,讀 從記憶體中讀出來 和行為 加上去 還有可能把加完後的資料在方法到i裡面去,出來也是1,這兩個執行緒同時進行...

Java記憶體模型

1.首先,執行緒a把本地記憶體a中更新過的共享變數重新整理到主記憶體中去。2.然後,執行緒b到主記憶體中去讀取執行緒a之前已更新過的共享變數。1.共享物件對各個執行緒的可見性 2.共享物件的競爭現象 指令級並行的重排序 如果不存l在資料依賴性,處理器可以改變語句對應機器指令的執行順序。記憶體系統的重...

Java記憶體模型

int x 0 thread a int y x thread bint x 5 int y 8 int z x y 關於上面的 存在這樣關係 x和z之間存在資料依賴關係,同時y和z之間也存在資料依賴關係。為了得到正確的結果,執行指令序列時,z不能重排序到x和y的前面。但是x和y之間並沒有資料依賴關...