多執行緒基礎學習八 volatile的使用

2021-08-10 09:42:15 字數 1348 閱讀 1814

有一次去某個公司面試,面試官是兩個人,他們問了我乙個問題,是否知道【[ˈ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 注意這裡引數必須存在,就...