volatile關鍵字失效。 求助!!!!!

2021-10-03 11:59:53 字數 644 閱讀 9355

public

class

test11

private

void

print()

public

static

void

main

(string[

] args)

catch

(interruptedexception e)

test.

change()

;}})

.start()

;new

thread

(new

runnable()

catch

(interruptedexception e)

test.

print()

;}})

.start()

;}}}

都說volatile 關鍵字能防止指令重排序,和保證執行緒間的可見性。

但是為什麼我的允許結果會出現 a = 1 b = 4這種情況呀 。 我的賦值操作也是原子操作,按理說應該不會出現這種情況呀!

Volatile關鍵字失效

volatile關鍵字用於修飾簡單型別變數,如int float boolean等資料型別,保證同一時刻只能有乙個執行緒修改變數。volatile修飾變數的操作就會變成原子級別的,但這有一定的情況會失效 public class volatiletest thread t2 new thread l...

關鍵字 volatile關鍵字的作用

1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性 使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值...

關鍵字volatile詳解

與關鍵字const一樣,關鍵字volatile也是乙個型別修飾符 type specifier 關於volatile的作用 例如程式清單 volatile int m 10 int k,n m k i volatile將告訴編譯器,整形變數m是隨時發生變化的,每次使用m的時候,都要求從m的位址中找出...