教育
教育
fdhgfjhgk
暱稱: fdh
性別: 女
國家: 香港
地區: 中西區
« March 2018 »
SMTWTFS
123
45678910
11121314151617
18192021222324
25262728293031
最新文章
台中財神廟-展示區台中...
網路拜拜-流行網路拜拜...
台中拜財神-好天氣拜財...
台中關帝廟-台中關帝廟...
財神廟-財神廟街道舉辦...
文章分類
全部 (320)
工業機械 (40)
生活資訊 (57)
投資理財 (9)
汽車 (4)
花店資訊 (8)
美食與餐飲 (7)
美容整形 (2)
家政服務 (1)
旅游住宿 (2)
教育學習 (8)
搜尋行銷 (48)
新聞類 (2)
經濟金融 (17)
團體服 (1)
未分類 (114)
訪客留言
最近三個月尚無任何留言
每月文章
日誌訂閱
尚未訂閱任何日誌
好友名單
尚無任何好友
網站連結
尚無任何連結
最近訪客
最近沒有訪客
日誌統計
文章總數: 320
留言總數: 1
今日人氣: 3
累積人氣: 887
站內搜尋
RSS 訂閱
RSS Feed
2009 年 11 月 19 日  星期四   晴天


Java中新的關鍵字—volatile 分類: 搜尋行銷

Java中新的關鍵字—volatile

 

在Java中設置變量值的操作,除了long和double類型的變量外都是原子操作,也就是說,對於變量值的簡單讀寫操作沒有必要進行同步。

這在JVM 1.2之前,Java的內存模型實現總是從主存讀取變量,是不需要進行特別的注意的。而隨著JVM的成熟和優化,現在在多線程環境下volatile關鍵字的使用變得非常重要。

在當前的Java內存模型下,線程可以把變量保存在本地內存(比如機器的寄存器)中,關鍵字廣告而不是直接在主存中進行讀寫。這就可能造成一個線程在主存中修改了一個變量的值,而另外一個線程還繼續使用它在寄存器中的變量值的拷貝,造成數據的不一致。
Volatile修飾的成員變量在每次被線程訪問時,都強迫從共享內存中重讀該成員變量的值。而且,當成員變量發生變化時,強迫線程將變化值回寫到共享內存。這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。

Java語言規範中指出:為了獲得最佳速度,允許線程保存共享成員變量的私有拷貝,而且只當線程進入或者離開同步代碼塊時才與共享成員變量的原始值對比。

這樣當多個線程同時與某個對象交互時,就必須要注意到要讓線程及時的得到共享成員變量的變化。

而volatile關鍵字就是提示VM:對於這個成員變量不能保存它的私有拷貝,而應直接與共享成員變量交互。
要解決這個問題,只需要像在本程序中的這樣,把該變量聲明為volatile(不穩定的)即可,關鍵字廣告這就指示JVM,這個變量是不穩定的,每次使用它都到主存中進行讀取。一般說來,多任務環境下各任務間共享的標誌都應該加volatile修飾。

使用建議:在兩個或者更多的線程訪問的成員變量上使用volatile。當要訪問的變量已在synchronized代碼塊中,或者為常量時,不必使用。

由於使用volatile屏蔽掉了VM中必要的代碼優化,所以在效率上比較低,關鍵字廣告因此一定在必要時才使用此關鍵字。
 






訪客留言 (返回 fdhgfjhgk 的日誌)

訪客名稱:
電郵地址: (不會公開)
驗證碼:  按此更新驗證碼 (如看不清楚驗證碼請點擊圖片刷新)
俏俏話: (必需 登入 後才能使用此功能)
[ 開啟多功能編輯器 ]