synchronized和volatile的區別?

2021-09-11 06:49:35 字數 524 閱讀 6443

一旦乙個共享變數(類的成員變數、類的靜態成員變數)被volatile修飾之後,那麼就具備了兩層語義:

1)保證了不同執行緒對這個變數進行操作時的可見性,即乙個執行緒修改了某個變數的值,這新值對其他執行緒來說是

立即可見的。

2)禁止進行指令重排序。

volatile本質是在告訴jvm當前變數在暫存器(工作記憶體)中的值是不確定的,需要從主存中讀取;

synchronized則是鎖定當前變數,只有當前執行緒可以訪問該變數,其他執行緒被阻塞住。

1.volatile僅能使用在變數級別;

synchronized則可以使用在變數、方法、和類級別的

2.volatile僅能實現變數的修改可見性,並不能保證原子性;

synchronized則可以保證變數的修改可見性和原子性

3.volatile不會造成執行緒的阻塞;

synchronized可能會造成執行緒的阻塞。

4.volatile標記的變數不會被編譯器優化;

synchronized標記的變數可以被編譯器優化

Servlet Biz Dao和Vo關係描述

servlet是伺服器 biz是business 業務邏輯的簡稱 dao是data access objects 資料訪問物件的簡稱 v0是value object值物件的簡稱 根據上面的流程圖可以了解servlet biz dao和vo之間基本的關係。1 首先是jsp檔案 就是我們看到的網頁 通過...

synchronized和volatile的區別

volatile關鍵字的本質是告訴jvm,該變數在暫存器中的值是不確定的,需要在主存中讀取,而synchronized關鍵字是鎖住當前變數,只有當前執行緒可以訪問,其他執行緒等待。volatile關鍵字的作用 保證變數的可見性和防止指令重排序。1.volatile只能作用於變數,而synchroni...

VO變數物件

js原理 原型鏈 執行上下文 事件迴圈 棧 棧是類似於陣列的一種資料結構。物件引用 如果變數是乙個物件,實際上變數中存放的是物件的位址 執行上下文 某個函式或全域性 的執行環境,該環境中包含執行 需要的所有資訊。可以簡單的理解為 執行上下文是乙個物件,物件中包含了執行 需要的資訊。當執行乙個函式時,...