volatile與syschronized的區別
在Java中的syschronized是執行緒同步的關鍵字,在Java類中的方法和變數或者類中使用了該關鍵字的時候,相當於給他們上了把鎖。
在進行功能執行的時候,一個執行緒中只能訪問該上了鎖後的方法或者變數和類,其他執行緒不能訪問當前執行緒上了鎖的方法或者變數和類,
使用該關鍵字的時候容易造成執行緒阻塞的狀態,使其他執行緒只能等待該上了鎖的執行緒執行完畢後才開始執行。在其他地方呼叫
該關鍵字的時候只能進行讀取的操作,而不能進行寫入的操作。(syschronized關鍵字的優點:可以被編譯器優化,缺點:使用了該關鍵字的變數會造成執行緒阻塞的問題)。
而volatile關鍵字恰恰與它相反,使用了該關鍵字的變數它會自動告訴工作記憶體中的值是不確定的。使用的時候需要從主存中讀取,該關鍵字只能使用在宣告的變數上,而不能使用到其他的地方。在其他地方呼叫該變數的時候可以進行讀寫的操作,它相對於syschronized關鍵字的最大區別在於它不會造成執行緒的阻塞,但是被標記的變數不會被編譯器優化。
到這裡,我們可以理解成為:syschronized關鍵字是一把重量級的鎖,而volatile關鍵字是一把輕量級的鎖。重量級的鎖的使用應該要謹慎,不注意很可能造成執行緒阻塞的問題。
相關推薦
volatile與syschronized的區別
在Java中的syschronized是執行緒同步的關鍵字,在Java類中的方法和變數或者類中使用了該關鍵字的時候,相當於給他們上了把鎖。 在進行功能執行的時候,一個執行緒中只能訪問該上了鎖後的方法或者變數和類,其他執行緒不能訪問當前執行緒上了鎖的方法或者變數和類, 使用該關鍵字
volatile與AtomicIntegerfieldupdater 區別與關係
volatile 實現了多執行緒的可見性,用於多執行緒對某個變數的修改 比如bool 值的變化,別的執行緒立即看到,可以退出迴圈之類的後續操作 但是volatile 不是執行緒安全,對其修飾的變數++ 加法減法等操作 保證不了執行緒安全 而AtomicIntegerfi
volatile與synchronized有什麽區別?
當前 使用 ros zed ati size run方法 優化 VM 下列說法正確的是()? A.我們直接調用Thread對象的run方法會報異常,所以我們應該使用start方法來開啟一個線程 B.一個進程是一個獨立的運行環境,可以被看做一個程序或者一個應用。而線程
執行緒、執行緒池、引用及volatile與synchronized的區別
執行緒池 corePoolSize 當前執行緒數=corePoolSize 阻塞,阻塞佇列滿時建立新執行緒,直至macPoolSize,再來任務時,執行reject()。 初始化執行緒池 newFixedThreadPool() 初始化指定大小,即使沒有
#Java 關鍵字volatile 與 synchronized 作用與區別,你知道嗎?
Java關鍵字volatile與synchronized作用是什麼,區別又是什麼呢?下面我們可以看看: 如果有想要學習java的小夥伴,可來我們的java學習扣裙哦:72340,3928裡面贈送java系列教學視訊和資料!小編也是從事了6年java開發的全棧工程
多線程學習:Volatile與Synchronized的區別、什麽是重排序
art 不可 順序 經典的 排序 傳遞 -s style family java線程的內存模型 java的線程內存模型中定義了每個線程都有一份自己的共享變量副本(本地內存),裏面存放自己私有的數據,其他線程不能直接訪問,而一些共享變量則存在主內存中,供所有線
volatile與synchronized的區別
nbsp 排序 pos 讓其 range 互斥 作用 ron mda 互斥即一次只允許一個線程持有某個特定的鎖,因此可使用該特性實現對共享數據的協調訪問協議,這樣,一次就只有一個線程能夠使用該共享數據。 可見性要更加復雜一些,它必須確保釋放鎖之前對共享數據
HAProxy與Nginx區別
時間 請求 也會 維護 異常 會有 訪問 haproxy 失敗 1)HAProxy對於後端服務器一直在做健康檢測(就算請求沒過來的時候也會做健康檢查):後端機器故障發生在請求還沒到來的時候,haproxy會將這臺故障機切掉,但如果後端機器故障發生在請求到達期間,那麽前端訪問
axis2與cxf區別
開源社區 -s 實現 部署 廣泛 asi -a ice 喜歡 1.CXF支持 WS-Addressing,WS-Policy, WS-RM, WS-Security和WS-I Basic Profile。Axis2不支持WS-Policy,但是承諾在下面的版本支持。 2.
C#中out與ref區別
erro 變量 但是 color 賦值 運行 網上 ann amp 一、ref(參考)與out區別 1、out(只出不進) 將方法中的參數傳遞出去,在方法中將該參數傳遞出去之前需要在該方法起始賦初值;在方法外傳遞的該參數可以不用賦值; 簡單理解就是:將一個東西拋出去之前必須
get( )與getline( )區別
clas 輸入緩沖 ont blog 函數 std etl con span get與getline區別不是很大,但一個明顯的區別是get遇到 ‘\n ‘字符後便返回,這是 ‘\n ‘還在緩沖區中,所以下次讀出來的將是 ‘\n ‘,而getline遇到 ‘\n ‘也返
dynamo與cassandra區別
ffi out thrown ive for enc coord towards ren 雖說cassandra是dynamo的開源版本,但兩者還是有很大區別的。 coordinator的選取: 在dynamo論文中,一般是preference list中N個副本的第一個
xml 與html 區別
sim 顯示數據 類型 打開 替代品 title extent 知識 col 一、什麽是HTML 帶著疑問走到這裏,一句話:HTML(HyperTextMark-upLanguage)即超文本標記語言,是WWW的描述語言。 如果想了解更多請看以下博客:
Mysql中key 、primary key 、unique key 與index區別
條件 那是 database 表空間 可用 where 進行 utf8 擁有 索引被用來快速找出在一個列上用一特定值的行。沒有索引,MySQL不得不首先以第一條記錄開始並然後讀完整個表直到它找出相關的行。 表越大,花費時間越多。如果表對於查詢的列有一個索引,MySQL能快
Hibernate 與 mybatis 區別
精通 targe man 做的 select read 持久層 定義 順序 JAVA面試中問及HIBERNATE與 MYBATIS的對比,在這裏做一下總結 我是一名java開發人員,hibernate以及mybatis都有過學習,在java面試中也被提及問道過,在項
Cookie與session區別
瀏覽器 cookie 通信設備 session與Cookie的區別此文章 來自烏龜運維wuguiyunwei.comQQ群:602183872主要區別:Cookie,也稱為HTTP cookie,Web cookie或瀏覽器cookie,是從網站發送到服務器並存儲在用戶的Web瀏覽器中的一小部分數
Appium與Robotium區別
觸摸 用戶 不能 語言設置 分開 clas 輸入文字 例子 mat Appium是基於UIAutomator框架實現的。Appium測試進程與目標應用進程是分開的,所以Appium不能直接訪問目標應用的各種element屬性進行copy&paste,而只能模擬觸發
STDIN_FILENO與stdin區別(轉)
strong 出現 stdin cti efi 兩個 正常 span col 標準輸入 (stdin) 標準輸入是指數據(通常是文件)走向程序。程序要求數據傳輸使用讀的運算。並非所有程序都要求輸入。如dir或ls程序(顯示一個目錄中的文件名)運行時不用任何輸入。 除非重導
cvCvtColor與cvtColor區別
blank 參數 接口類 類型 ima 灰度 another out ray 用到了rgb轉灰度圖功能,查到兩個函數,發現名字很像,功能也一樣,但是參數類型不一樣。 記錄一下。 可以看聲明,cvCvtColor是c語言風格接口。 /* Converts input arr
exec與xargs區別
必須 合成 作文 back 方便 否則 dir name color 沒有哪個更好哪個更不好 復習一下 exec是對每個找到的文件執行一次命令,除非這單個的文件名超過了幾k,否則不會出現命令行超長出報錯的問題。而xargs是把所有找到的文件名一股腦的轉給命令。當文件