volitale最經典理解

2022-03-21 22:37:57 字數 1213 閱讀 5429

「volatile保證了執行緒之間的可見性」:因為執行緒看到volatile變數會去讀取主記憶體最新的值,而不是自個一直在那跟內部的變數副本玩,所以保證了valatile變數在各個執行緒間的可見性。

「volatile保證了執行緒之間的可見性」:因為執行緒看到volatile變數會去讀取主記憶體最新的值,而不是自個一直在那跟內部的變數副本玩,所以保證了valatile變數在各個執行緒間的可見性。

「volatile保證了執行緒之間的可見性」:因為執行緒看到volatile變數會去讀取主記憶體最新的值,而不是自個一直在那跟內部的變數副本玩,所以保證了valatile變數在各個執行緒間的可見性

「volatile保證了執行緒之間的可見性」:因為執行緒看到volatile變數會去讀取主記憶體最新的值,而不是自個一直在那跟內部的變數副本玩,所以保證了valatile變數在各個執行緒間的可見性。

public class cthread extends thread 

@override

public void run() catch (ioexception e)

} }}

在主函式中啟動執行緒後將flag的值修改為false,執行緒很有可能繼續執行。這是因為主函式中對變數flag的操作對執行緒不可見。即執行緒已經拷貝了乙份flag的資訊(拷貝時flag為true),然後在暫存器裡進行一系列操作,當記憶體更新後執行緒不知道,仍然以副本中flag的值(true)在執行。

而volatile修飾的變數具有可見性,即保證執行緒讀取到的是最新更新的值。執行緒不拷貝記憶體變數而是直接讀取記憶體中的變數,當記憶體中變數被其他執行緒修改後執行緒能立馬知道。volatile是比同步更輕量級的操作,同步是鎖定變數,只允許乙個執行緒對其進行操作,是原子性動作。

當然被volatile修飾的變數也不是絕對的執行緒安全的。

public class test extends thread

public void test()

} @override

public void run() catch (interruptedexception e)

count++; }}

我執行的結果是:999

為什麼不是理論上的1000呢?

假設count在記憶體中最新更新的值是666,才是a執行緒和b執行緒都讀取了這個變數的值然後分別進行加1的操作,a更新記憶體的值為667,b也更新記憶體的值為667,這就導致了執行緒不安全。

volitale最經典理解

volatile保證了執行緒之間的可見性 因為執行緒看到volatile變數會去讀取主記憶體最新的值,而不是自個一直在那跟內部的變數副本玩,所以保證了valatile變數在各個執行緒間的可見性。volatile保證了執行緒之間的可見性 因為執行緒看到volatile變數會去讀取主記憶體最新的值,而不...

2009最經典名句

1 我的優點是 我很帥 但是我的缺點是 我帥的不明顯.2 談錢不傷感情,談感情最他媽傷錢。3 我詛咒你一輩子買速食麵沒有調料包。4 會計說 你晚點來領工資吧,我這沒零錢。5 雖然你身上噴了古龍水,但我還是能隱約聞到一股人渣味兒。6 有一次我上街,一群女孩把我攔住,她們說我帥,我不承認,她們就打我,還...

最經典的笑話

有乙個修女到神父那裡懺悔 神父,請您原諒我,我昨天辱罵了乙個男人。神父 你罵他什麼?修女 我罵他 你媽了個bi 神父 你為什麼要罵他呢,告訴我,我會請求上帝原諒你的。修女 她摸我的胸部。神父把手伸進了修女的胸部 是這樣嗎?修女 是的。神父 即使他摸了你的胸,你也不應該罵他啊。修女 可是他又接著往下摸...