多執行緒中,區域性變數與全域性變數哪個比較安全?
區域性變數是在堆疊中執行。每個執行的執行緒都有自己的堆疊。
別的執行緒無法訪問得到,因此我們說,區域性變數是“安全”的。
全域性變數在堆中,堆是對所有的執行緒都可見的。
因此在兩個以上的執行緒訪問全域性變數時,就會出現所謂的
“不安全”,a執行緒訪問全域性變數,賦值為a,然後中間睡眠了0.001秒,在此期間b程式訪問了全域性變數,賦值為b了,此時a執行緒醒來了,搶了處理機,發現全域性變數是b,顯然不是我們a執行緒所要到的值,這時就要加入同步機制或者定義為區域性變數,比如如果是方法的話就加同步方法,程式碼塊就加同步程式碼塊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31543790/viewspace-2220503/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 全域性變數與區域性變數變數
- Java區域性變數與全域性變數Java變數
- 【c】全域性變數與區域性變數變數
- python全域性變數與區域性變數Python變數
- 區域性變數和全域性變數變數
- C語言區域性變數、全域性變數、靜態區域性變數、靜態全域性變數C語言變數
- java 全域性變數和區域性變數Java變數
- JavaScript —— 區域性變數和全域性變數JavaScript變數
- jmeter全域性變數和區域性變數JMeter變數
- javascript中的作用域(全域性變數和區域性變數)JavaScript變數
- Python全域性變數與區域性變數詳解Python變數
- 詳解python 區域性變數與全域性變數Python變數
- Python中的全域性變數和區域性變數Python變數
- python多執行緒-共享全域性變數Python執行緒變數
- Android中全域性變數與區域性變數的使用總結Android變數
- JavaScript五:全域性變數&區域性變數;運算子JavaScript變數
- python全域性變數和區域性變數, globalPython變數
- java執行緒安全問題之靜態變數、例項變數、區域性變數Java執行緒變數
- 記一個全域性變數"冒充"區域性變數引起的bug變數
- iOS 靜變數static、全域性變數extern、區域性變數、例項變數iOS變數
- js-js的全域性變數和區域性變數JS變數
- Python的區域性變數和全域性變數使用解惑Python變數
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- Python的全域性和區域性變數Python變數
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- Jmeter-全域性變數跨執行緒組使用JMeter變數執行緒
- 靜態全域性變數和全域性變數變數
- [Python學習] 專題六.區域性變數、全域性變數global、匯入模組變數Python變數
- angular中定義全域性變數及全域性變數的使用Angular變數
- 十二、變數作用域:區域性變數、全域性變數,函式版名片管理系統—新增函式文件變數函式
- 10、Java併發性和多執行緒-執行緒安全與不可變性Java執行緒
- 全域性變數變數
- 函式之定義及全域性變數&區域性變數&風溼理論函式變數
- 程式程式碼,常量,區域性變數,全域性變數在記憶體中的儲存位置變數記憶體
- 成員變數和區域性變數變數
- 【Java貓說】例項變數與區域性變數Java變數
- Python中類變數、成員變數、區域性變數的區別Python變數
- golang變數作用域問題-避免使用全域性變數Golang變數