synchronized既保證原子性,又保證內(nèi)存可見性,是一種線程同步的方式,是鎖機制的一種java實現(xiàn)。synchronized的實現(xiàn)基于JVM底層,JVM是基于monitor實現(xiàn)的,而monitor的實現(xiàn)依賴于操作系統(tǒng)的互斥實現(xiàn)。
語義
synchronized語義是同步,但同步有兩層含義:
互斥,即鎖的特點。同一時間只能有一個線程持有監(jiān)視器,因此一旦線程進入監(jiān)視器保護的代碼塊(即臨界區(qū)),其他線程是不允許監(jiān)視器保護的代碼塊,直到前一個線程退出代碼塊。互斥阻止了其他線程看到對象不一致的狀態(tài),與原子性有相同的語義。
可見。synchronized保證進入同步代碼塊的線程,都可以看到由同一個鎖保護的之前所有的修改效果。原因是:在釋放監(jiān)視器時(即退出同步代碼塊),會將工作內(nèi)存中未映射到主內(nèi)存的工作拷貝,強制刷新回主內(nèi)容。在獲取監(jiān)視器是(即進入同步代碼塊時),監(jiān)視器會使本地內(nèi)存失效,強制從主內(nèi)存拷貝到工作內(nèi)存。
互斥保證在線程退出前,所有對象狀態(tài)變更都對其他線程不可見;可見保證在線程進入同步代碼塊時,可以看到上一個線程對對象狀態(tài)變更的最終狀態(tài)。
線程安全與同步
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26