轉自:
http://www.java265.com/JavaMianJing/202205/16535583103522.html
下文筆者講述java中volatile和synchronized的功能和區別簡介說明,如下所示
volatile關鍵字功能
被volatile修飾的變數不保留拷貝,直接訪問主記憶體中的,
在Java記憶體模型中,有main memory,每個執行緒也有自己的memory(如暫存器)
為了性能,一個執行緒會在自己的memory中保持要訪問的變數的副本
這樣就會出現同一個變數在某個瞬間,
在一個執行緒的memory中的值可能與另外一個執行緒memory中的值,或main memory中的值不一致的情況
一個變數宣告為volatile,就意味著這個變數是隨時會被其他執行緒修改的,因此不能將它cache在執行緒memory中
synchronized
當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個執行緒執行該段代碼 一、當兩個并發執行緒訪問同一個物件object中的這個synchronized(this)同步代碼塊時,一個時間內只能有一個執行緒得到執行,另一個執行緒必須等待當前執行緒執行完這個代碼塊以后才能執行該代碼塊 二、然而,當一個執行緒訪問object的一個synchronized(this)同步代碼塊時,另一個執行緒仍然可以訪問該object中的非synchronized(this)同步代碼塊 三、尤其關鍵的是,當一個執行緒訪問object的一個synchronized(this)同步代碼塊時,其他執行緒對object中所有其它synchronized(this)同步代碼塊的訪問將被阻塞 四、當一個執行緒訪問object的一個synchronized(this)同步代碼塊時,它就獲得了這個object的物件鎖,結果,其它執行緒對該object物件所有同步代碼部分的訪問都被暫時阻塞 五、以上規則對其它物件鎖同樣適用
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/492207.html
標籤:Java
