多執行緒中,區域性變數與全域性變數哪個比較安全?
區域性變數是在堆疊中執行。每個執行的執行緒都有自己的堆疊。
別的執行緒無法訪問得到,因此我們說,區域性變數是“安全”的。
全域性變數在堆中,堆是對所有的執行緒都可見的。
因此在兩個以上的執行緒訪問全域性變數時,就會出現所謂的
“不安全”,a執行緒訪問全域性變數,賦值為a,然後中間睡眠了0.001秒,在此期間b程式訪問了全域性變數,賦值為b了,此時a執行緒醒來了,搶了處理機,發現全域性變數是b,顯然不是我們a執行緒所要到的值,這時就要加入同步機制或者定義為區域性變數,比如如果是方法的話就加同步方法,程式碼塊就加同步程式碼塊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31543790/viewspace-2220503/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 全域性變數與區域性變數變數
- Java區域性變數與全域性變數Java變數
- 【c】全域性變數與區域性變數變數
- 區域性變數和全域性變數變數
- python多執行緒-共享全域性變數Python執行緒變數
- Python中的全域性變數和區域性變數Python變數
- java 全域性變數和區域性變數Java變數
- jmeter全域性變數和區域性變數JMeter變數
- javascript中的作用域(全域性變數和區域性變數)JavaScript變數
- java執行緒安全問題之靜態變數、例項變數、區域性變數Java執行緒變數
- JavaScript五:全域性變數&區域性變數;運算子JavaScript變數
- js-js的全域性變數和區域性變數JS變數
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- Jmeter-全域性變數跨執行緒組使用JMeter變數執行緒
- 十二、變數作用域:區域性變數、全域性變數,函式版名片管理系統—新增函式文件變數函式
- 函式之定義及全域性變數&區域性變數&風溼理論函式變數
- 全域性變數變數
- Python中類變數、成員變數、區域性變數的區別Python變數
- 成員變數和區域性變數變數
- 【Java貓說】例項變數與區域性變數Java變數
- golang變數作用域問題-避免使用全域性變數Golang變數
- 全域性 DOM 變數變數
- 彙編眼中的函式呼叫引數傳遞以及全域性與區域性變數與“基址”函式變數
- test函式中的區域性變數函式變數
- js宣告全域性變數JS變數
- 【高併發】面試官問我:為什麼區域性變數是執行緒安全的?面試變數執行緒
- 簡述SHELL全域性環境變數與局變環境變數變數
- Jmeter將token設定為全域性變數並跨執行緒進行傳遞引數JMeter變數執行緒
- 理解靜態區域性變數(static)在程式中的執行規則變數
- vue定義全域性變數和全域性方法Vue變數
- 全域性DOM變數的坑變數
- PHP 超級全域性變數PHP變數
- less 全域性變數使用 引用變數
- 【SQL Server】常用全域性變數SQLServer變數
- Java 中將lambda 表示式體中的變數賦值給lambda體之外的一個區域性變數時,要求那個區域性變數是final 修飾的Java變數賦值
- javap -c 運算元棧 區域性變數表執行過程Java變數
- 類,物件,成員變數和區域性變數,匿名物件物件變數