民宿
xinmeyu11
暱稱: xinmeyu11
性別: 男
國家: 澳洲
地區: 其他地區
«‹ July 2024 ›»
SMTWTFS
123456
78910111213
14151617181920
21222324252627
28293031
最新文章
•立秋:傳統旺運方法有...
•影響婚姻生活的風水
•貨運的相關術語
•貨運資格證辦理流程
•數位廣告機和電視有哪...
文章分類
•全部 (691)
•醫療保健 (26)
•工業機械與家電 (60)
•生活资讯 (52)
•字幕機租賃 (1)
•汽車 (6)
•花店資訊 (4)
•服飾批發 (29)
•物流咨詢 (2)
•星座命名 (2)
•美食與餐飲 (14)
•美容整形 (12)
•家政服務 (11)
•旅行住宿 (12)
•婚慶文化 (11)
•教育學習 (14)
•買房與租房 (2)
•搜寻行销 (63)
•經濟金融 (14)
•徵信社 (7)
•數位廣告機 (1)
•未分類 (348)
訪客留言
最近三個月尚無任何留言
每月文章
日誌訂閱
尚未訂閱任何日誌
好友名單
尚無任何好友
網站連結
尚無任何連結
最近訪客
最近沒有訪客
日誌統計
文章總數: 691
留言總數: 8
今日人氣: 11
累積人氣: 26220
站內搜尋
RSS 訂閱
RSS Feed
2009 年 11 月 23 日  星期一   晴天


新關鍵字volatile的安排 分類: 搜寻行销

新關鍵字volatile的安排

 

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

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

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

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

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

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

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

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






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

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