有一次去某個公司面試,面試官是兩個人,他們問了我乙個問題,是否知道【[ˈvɒleɪt] 】關鍵字,以及它的用法,我當時怎麼都想不出來有這個關鍵字,只好說不知道,沒見過這個關鍵字,面試沒通過,臨走的時候我讓他們拼一下這個關鍵字,然後他們告訴我是【volatile】,現在想想都覺得是迷之讀音啊。
輕量級的同步機制,保證了資料的可見性,不保證原子性,網上資料都是這麼說,然而我卻不怎麼理解。
public
class
volitatetest
}static
class
volitatethread
extends
thread
}static
class
test
}}
執行結果:
243
3567
8910
執行了很多次,基本都是錯誤的資料結果。
我覺得,volatile的可見性保證了不同的執行緒讀取的資料都是最新的(不知道底層怎麼實現),但是不同執行緒可以都修改這個資料,不能保證資料的正確。
所以我有點理解了為什麼很多博主都說,volatile無法應用於計數。這樣的話,單獨使用volatile無法實現多執行緒的情況下的計數功能。
在以上理解的基礎上,volatile適合修改執行緒和讀取使用執行緒相互不影響的情況。
多個執行緒都要讀取某個資料,但是不會修改這個資料;乙個執行緒會修改資料。
測試**:
public
class
volitatetest
thread change = new changethread();
change.start();
}static
class
volitatethread
extends
thread
}static
class
changethread
extends
thread
}static
class
test
}public
static
void changeflag()
}}
輸出結果:
我在做事
我在做事
我在做事
我在做事
我在做事
我在做事
狀態改變了
10個做事執行緒,實際上只有6個做事了,剩下4個因為狀態改變了,就沒有做。
這是我想到最有可能的使用場景。但是我網上還有講解更詳細的,可以參考這裡
多執行緒 基礎多執行緒學習分享
程序 程式是靜止,其真正執行時的程式才稱之為程序 執行緒 輕量級程序 light weight process 程序與執行緒區別 執行緒的組成 建立執行緒 主要的兩種方式 a 繼承thread類方法 步驟 1.編寫類 繼承thread 2.重寫run方法 3.建立執行緒物件 4.呼叫start方法啟...
C 學習 多執行緒程式設計 多執行緒基礎
c 內建了對多執行緒程式設計的支援功能,所以相對於其他語言在多執行緒方面的問題,c 這裡就已經最小化或者不復存在。在.net framework 4.0中,c 中新增了兩個與多執行緒應用程式相關的重要功能 tpl 任務執行並行庫 和plinq 並行linq 兩者都提供對並行程式設計的支援,都可以利用...
Python多執行緒基礎學習
python多執行緒用法 1.函式式 呼叫thread模組的start new thread 方法來建立執行緒,例如 thread.start new thread function,args args是函式的引數列表,在python裡用元組表示,如 args1 args2 注意這裡引數必須存在,就...