亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java并發底層實現原理學習心得

2024-07-13 10:16:06
字體:
來源:轉載
供稿:網友

我們知道java實現的并發操作最后肯定是由我們的CPU完成的,中間經歷了將java源碼編譯成.class文件,然后進行加載,然后虛擬機執行引擎進行執行,解釋為匯編語言,然后轉為操作系統指令,然后轉為1,0,最后CPU進行識別執行。

提到java的并發,我們不由的就會想到java中常見的鍵字:volatile和synchronized,我們接下來就會從這兩個關機字展開分析:

volatile的底層實現原理

synchronized的實現原理和應用

volatile

說到volatile,在java的面試中面試官可是最喜歡問的問題了??吹剿覀兪紫认氲降谋闶潜3志€程間的可見性,是一個輕量級的synchronized,在一些情況下它可以代替synchronized。

volatile的作用:

一個被volatie修飾的變量,java內存模型會保證所有的線程看見的變量值是一致的。

volatile的工作原理:

我們可以定義一個volatile變量,并對他進行賦值,并通過工具來獲取jit編譯器生成的匯編指令,我們會發現在對volatile變量進行寫操作時,會多出一條指令:以lock為前綴的指令:

lock為前綴的指令在多核處理器下回引發兩件事情:

①將當前處理器緩存行的數據回寫到內存中。

②這個回寫內存的操作會使得在其他cpu里緩存了改內存地址的數據無效。

當我們知道了以上兩點,我們就不難理解volatie變量的機制了。

在多處理器下,為了保證各個處理器的緩存是一致的,會實現緩存一致性協議,每個處理器通過嗅探在總線上的傳播的數據來檢查自己緩存的值是不是過期了。

synchronized

想到多線程的并發,其實我第一個想到的便是這個synchronized,翻譯過來為同步,我們都知道它是一個重量級鎖,當對一個方法或者代碼塊使用它時,當一個線程獲得了這個鎖,那么其它的線程就會陷入掛起狀態,在java中也就表現為sleep狀態,我們都知道線程的掛起和運行時要轉入操作系統的內核態的(與內核態對應的便是用戶態),這樣特別浪費cpu資源,所以這個重量級鎖是名副其實的!

但是,java SE 1.6過后java的維護團隊對它進行了一系列的優化(這些優化后面一一講述),他也就沒那么“重”了,以前還有優勢的可重入鎖也變得沒那么有優勢了(ReentrantLock)。

一下我們就下列幾個方面講述synchronized:

利用synchronized實現同步的基礎

synchronized是如何實現鎖的

偏向鎖,輕量級鎖(自旋鎖),重量級鎖

鎖的升級

java如何實現原子操作

①利用synchronized實現同步的基礎:

我們在開發中或者java的源碼中都能看見synchronized的身影,例如HashTable,StringBuilder等地方,常見有兩種方式:

Ⅰ丶同步方法

同步方法只需要在方法前加上synchronized便可,當一個線程執行它的時候其他線程便會陷入等待,直到它釋放鎖。對方法使用又可以分為兩種:對普通同步方法和對靜態方法,它們之間的差別是加鎖的對象不同,普通方法加鎖的位置是當前的對象,而靜態方法加鎖的位置是當前類的Class對象。

Ⅱ丶同步方法塊

同步方法塊加鎖的是Synchronized后括號里配置的對象,這個對象可以是一個值以及任何一個變量或者對象。

②synchronized是如何實現鎖的:

在jvm的規范中可以看到synchronized在jvm中的實現原理,jvm基于進入和退出Monitor對象來實現同步方法和代碼塊的同步,代碼塊是使用monitorenter和monitorexit指令來實現的,而同步方法jvm規范里沒有具體給出,但是我相信具體的原理應該相差不大,無非是將java源碼編譯為class文件,在class字節碼文件中對使用synchronized的方法進行一個標記,在字節碼引擎執行這個方法的時候會對這個方法進行同步處理。

③偏向鎖,輕量級鎖(自旋鎖),重量級鎖:

在講鎖之前我們需要知道java對象頭,java的對象頭:
synchronized使用的鎖是存儲在java對象頭里的,java對象頭里面有32bit/64bit(視操作系統的位數而定)長度的MarkWord 里面存儲了對象的hashCode和鎖的信息等,在MarkWord中有2bit的空間來表示鎖的狀態00,01,10,11,分別表示輕量級鎖,偏向鎖,重量級鎖,GC標記。

偏向鎖:偏向鎖也就人稱它為偏心鎖,從名字我們就可以看出來,它是一個偏向某一個線程的鎖。

在實際的開發中,我們發現多線程并發,大多數執行同步方法的都是同一個線程,出現多個線程爭搶一個方法的概率比較低,所以重復的獲取鎖和釋放鎖就會產生大量的資源浪費,所以為了讓線程獲得鎖的代價更低引入了偏向鎖,當一個線程訪問一個同步塊并獲得鎖時,會在對象頭和線程的棧幀中的鎖記錄中存儲偏向鎖的線程ID,以后該線程進入和退出同步塊時不需要進行CAS操作來進行加鎖和解鎖,只需要簡單的查看對象頭的MarkWord里是否還存有指向當前的偏向鎖(在MarkWord中每個對象還有一個偏向鎖標志位用來表示當前對象是否支持偏向鎖,我們可以使用jvm參數來設定偏向鎖)。

關于偏向鎖的釋放,偏向鎖使用了等到存在競爭時才釋放鎖的機制,所以當有其他線程嘗試競爭偏向鎖的時候持有偏向鎖的線程才會釋放鎖。

注意:在java6,7中偏向鎖是默認啟動的

輕量級鎖:

輕量級鎖就是在執行同步塊之前,jvm會在當前線程的棧幀中創建用于存儲鎖記錄的的空間,并將對象頭中的MarkWord復制到里面,然后線程將嘗試將對象頭內的MarkWord替換為指向鎖記錄的指針,如果成功,當前線程獲得鎖,如果失敗,表示其他線程競爭鎖,當前線程便自旋來獲得鎖。

④鎖的升級:

當前線程如果無法試用上面的方法獲得鎖,那么表示當前的鎖存在競爭,鎖就會升級為重量級鎖。

輕量級鎖和偏向鎖的區別:

輕量級鎖是在無競爭的情況下使用CAS操作去消除同步使用的互斥量,而偏向鎖就是在無競爭的情況下把整個同步都去除,連CAS操作都不做!

⑤ java如何實現原子操作:

在了解java是如何實現原子操作之前,我們要知道處理器是如何實現原子操作的:

處理器一般分為兩種方法執行原子操作:緩存加鎖和總線加鎖,其中緩存加鎖比較優秀而總線加鎖則比較消耗資源。(關于兩種加鎖的方式我們這里不做過多解釋,具體在操作系統中有詳細的講解)

java使用(大多數情況下)循環CAS實現原子操作,但是使用CAS實現原子操作也會出現下面的一些經典的問題:

一)ABA問題

jdk中提供AtomicStampedReference類來解決(提供檢查預期引用和預期標志)

二)循環時間長開銷大

無法解決,這個是循環的通病

三)只能保證一個共享變量的原子操作

jdk中提供一個AtomicReference來解決,將多個共享變量放置在一個類中進行CAS操作。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品三级网站| 91国产美女在线观看| 亚洲综合社区网| 国产一区二区三区久久精品| 狠狠色噜噜狠狠狠狠97| 中文字幕精品视频| 欧美在线视频在线播放完整版免费观看| 色中色综合影院手机版在线观看| 亚洲一区美女视频在线观看免费| 亚洲国产天堂久久国产91| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲成人a级网| 亚洲精品在线看| 成人午夜两性视频| 亚洲区免费影片| 亚洲福利视频网站| 欧美视频在线观看免费| 亚洲黄色www网站| 国产成+人+综合+亚洲欧美丁香花| 国产香蕉精品视频一区二区三区| 亚洲欧美成人一区二区在线电影| 欧美性20hd另类| 亚洲高清免费观看高清完整版| 午夜精品福利视频| 97视频com| 久久精品电影一区二区| 欧美一区二区三区四区在线| 亚洲精品一区av在线播放| 亚洲www永久成人夜色| 色777狠狠综合秋免鲁丝| 都市激情亚洲色图| 精品一区二区亚洲| 成人av番号网| 国产精品免费观看在线| www.亚洲成人| 一区二区三区国产在线观看| 91po在线观看91精品国产性色| 国模极品一区二区三区| 91av免费观看91av精品在线| 国产91精品视频在线观看| 国产成人精品免高潮费视频| 8090成年在线看片午夜| 91人人爽人人爽人人精88v| 亚洲国产成人91精品| 欧美日韩国产专区| 日韩美女av在线免费观看| 久久精品男人天堂| 精品在线观看国产| 欧美激情久久久久| 亚洲国产又黄又爽女人高潮的| 国产精品久久久久91| 久久久久免费视频| 欧美性生活大片免费观看网址| 亚洲人成伊人成综合网久久久| 国产亚洲一区二区在线| 欧美在线观看一区二区三区| 亚洲视频国产视频| 亚洲国产婷婷香蕉久久久久久| 亚洲福利小视频| 欧美激情久久久久| 成人精品久久一区二区三区| 久久久久国产精品免费| 91免费电影网站| 欧美日韩中文字幕| 成人国内精品久久久久一区| 国产香蕉一区二区三区在线视频| 91精品国产综合久久香蕉的用户体验| 久久久精品欧美| 欧美亚洲在线视频| 国产极品jizzhd欧美| 久久久久亚洲精品| 国产999在线观看| 最近中文字幕2019免费| 国产欧美精品久久久| www.亚洲男人天堂| 精品偷拍各种wc美女嘘嘘| 91精品国产自产在线| 日韩精品极品视频| 91禁国产网站| 国产精品18久久久久久麻辣| 久久伊人精品天天| 日韩美女av在线免费观看| 欧美日韩成人在线播放| 国产精品草莓在线免费观看| www欧美日韩| 国产婷婷成人久久av免费高清| 国产精品伦子伦免费视频| 亚洲视频在线免费看| 91av在线免费观看| 日韩在线观看视频免费| 一本一本久久a久久精品牛牛影视| 欧美日韩国产精品一区二区三区四区| 中文字幕不卡在线视频极品| 日韩电影免费在线观看| 中文字幕精品一区久久久久| 日本久久久久久久久久久| 这里只有精品视频在线| 国产在线精品成人一区二区三区| 岛国av一区二区在线在线观看| 精品久久久久久亚洲精品| 中文字幕精品一区二区精品| 亚洲一区二区三区在线视频| 亚洲护士老师的毛茸茸最新章节| 欧美性videos高清精品| 亚洲激情视频在线播放| 亚洲精品v天堂中文字幕| 亚洲色图第一页| 日韩小视频在线观看| 国产在线观看91精品一区| 亚洲精品国产精品久久清纯直播| 国产午夜精品视频| 影音先锋欧美在线资源| 精品高清美女精品国产区| 欧美高清在线播放| www.久久草.com| 日韩高清中文字幕| 福利二区91精品bt7086| 欧美大片免费观看| 色婷婷综合成人| 在线不卡国产精品| 中文字幕精品在线| 国产成人高清激情视频在线观看| 欧美在线一级va免费观看| 欧美在线观看网站| 97香蕉超级碰碰久久免费的优势| 亚洲精品国产综合区久久久久久久| 亚洲一区久久久| 国产精品高清在线观看| 精品中文字幕在线| 日韩久久精品电影| 精品夜色国产国偷在线| 国产精品成人一区二区三区吃奶| 欧美—级a级欧美特级ar全黄| 国产最新精品视频| 国产精品美女网站| 国产成人精品电影久久久| 日韩在线视频导航| 久久久久久av| 久久99精品国产99久久6尤物| 国产精品欧美激情在线播放| 国产情人节一区| 国产亚洲免费的视频看| 九九热在线精品视频| 一个人看的www久久| 日本精品视频在线| 亚洲激情在线观看视频免费| 中文字幕精品一区二区精品| 国产97在线|亚洲| 亚洲国产精品中文| 中文字幕九色91在线| 亚洲图片在区色| 久久精品中文字幕电影| 伊人伊成久久人综合网小说| 日韩在线观看免费全| 国产精品极品美女粉嫩高清在线| 国产精品久久一区主播| 精品视频9999| 亚洲国产精品久久久久秋霞不卡| 久久精品99国产精品酒店日本| 精品国产91久久久| 久久久亚洲网站| 亚洲sss综合天堂久久| 日本免费在线精品| 亚洲自拍偷拍福利|