欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎樣深入理解Java多線程與并發(fā)框中的synchronized關鍵字-創(chuàng)新互聯(lián)

怎樣深入理解Java多線程與并發(fā)框中的synchronized 關鍵字,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

站在用戶的角度思考問題,與客戶深入溝通,找到福貢網站設計與福貢網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網站設計、成都網站制作、企業(yè)官網、英文網站、手機端網站、網站推廣、域名注冊、網絡空間、企業(yè)郵箱。業(yè)務覆蓋福貢地區(qū)。

一、Class文件與對象

對象頭 32位JVM的對象頭

二、synchronized 三種應用方式

用于實例對象方法(對象是鎖) 用于靜態(tài)方法(類是鎖) 用于同步代碼塊(同步代碼塊是鎖)

三、synchronized 底層語義原理

鎖:就在對象頭中

Java 虛擬機中的同步(Synchronization)基于 進入enter 和 退出exit 監(jiān)視器(Monitor)對象 實現, 無論是顯式同步(有明確的 monitorenter 和 monitorexit 指令,即同步代碼塊)還是隱式同步都是如此。在 Java 語言中,同步用的最多的地方可能是被 synchronized 修飾的同步方法。同步方法 并不是由 monitorenter 和 monitorexit 指令來實現同步的,而是由方法調用指令讀取運行時常量池中方法的 ACC_SYNCHRONIZED 標志來隱式實現的,關于這點,稍后詳細分析。下面先來了解一個概念Java對象頭,這對深入理解synchronized實現原理非常關鍵。

1. 對象加鎖: 使用 monitorenter 和 monitorexit 指令分別獲取控制權和釋放控制權。

2. 方法加鎖:

方法級的同步是隱式,即無需通過字節(jié)碼指令來控制的,它實現在方法調用和返回操作之中。JVM可以從方法常量池中的方法表結構(method_info Structure) 中的 ACC_SYNCHRONIZED 訪問標志區(qū)分一個方法是否同步方法。當方法調用時,調用指令將會檢查方法的 ACC_SYNCHRONIZED 訪問標志是否被設置,如果設置了,執(zhí)行線程將先持有monitor(虛擬機規(guī)范中用的是監(jiān)視器一詞), 然后再執(zhí)行方法,最后再方法完成(無論是正常完成還是非正常完成)時釋放monitor。在方法執(zhí)行期間,執(zhí)行線程持有了monitor,其他任何線程都無法再獲得同一個monitor。如果一個同步方法執(zhí)行期間拋 出了異常,并且在方法內部無法處理此異常,那這個同步方法所持有的monitor將在異常拋到同步方法之外時自動釋放。

四、JVM對synchronized的優(yōu)化

背景:Java 6之后,為了減少獲得鎖和釋放鎖所帶來的性能消耗,引入了 偏向鎖 和 輕量級鎖。 鎖的狀態(tài):無鎖狀態(tài)、偏向鎖、輕量級鎖、重量級鎖。 鎖從 偏向鎖 -> 輕量級鎖 -> 重量級鎖 的鎖升級是單向的、不可逆的,沒有 鎖降級 這一說。

1. 偏向鎖

因此為了減少同一線程獲取鎖(會涉及到一些CAS操作,耗時)的代價而引入偏向鎖。偏向鎖的核心思想是,如果一個線程獲得了鎖,那么鎖就進入偏向模式,此時Mark Word 的結構也變?yōu)槠蜴i結構,當這個線程再次請求鎖時,無需再做任何同步操作,即獲取鎖的過程,這樣就省去了大量有關鎖申請的操作,從而也就提供程序的性能。

2. 輕量級鎖

輕量級鎖所適應的場景是 線程交替執(zhí)行同步塊 的場合,如果存在 同一時刻訪問同一鎖 的場合,就會導致輕量級鎖膨脹為重量級鎖。

3. 自旋鎖

自旋鎖是樂觀的一種表現,樂觀的認為很大概率是能夠獲得鎖的。(根據阿里巴巴Java開發(fā)規(guī)范:如果每次訪問沖突的概率小于 20%,推薦使用樂觀鎖,否則使用悲觀鎖。樂觀鎖的重試次數不得小于3次。)

4. 重入鎖

從互斥鎖的設計上來說,當一個線程試圖操作一個由其他線程持有的對象鎖的臨界資源時,將會處于阻塞狀態(tài),但當一個線程再次請求自己持有對象鎖的臨界區(qū)的資源時,這種情況屬于 *重入鎖,請求將會成功,在java中synchronized是基于原子性的內部鎖機制,是可重入的,因此在一個線程調用synchronized方法的同時在其方法體內部調用該對象另一個synchronized方法,也就是說一個線程得到一個對象鎖后再次請求該對象鎖,是允許的,這就是synchronized的可重入性。

5. 鎖消除

消除鎖是虛擬機另外一種鎖的優(yōu)化,這種優(yōu)化更徹底,Java虛擬機在JIT編譯時(可以簡單理解為當某段代碼即將第一次被執(zhí)行時進行編譯,又稱即時編譯),通過對運行上下文的掃描,去除不可能存在共享資源競爭的鎖,通過這種方式消除沒有必要的鎖,可以節(jié)省毫無意義的請求鎖時間,如下StringBuffer的append是一個同步方法,但是在add方法中的StringBuffer屬于一個局部變量,并且不會被其他線程所使用,因此StringBuffer不可能存在共享資源競爭的情景,JVM會自動將其鎖消除。

五、synchronized關鍵點

中斷與synchronized: 事實上線程的中斷操作對于正在等待獲取的鎖對象的synchronized方法或者代碼塊并不起作用,也就是對于synchronized來說,如果一個線程在等待鎖,那么結果只有兩種,要么它獲得這把鎖繼續(xù)執(zhí)行,要么它就保存等待,即使調用中斷線程的方法,也不會生效。

看完上述內容,你們掌握怎樣深入理解Java多線程與并發(fā)框中的synchronized 關鍵字的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創(chuàng)新互聯(lián)-成都網站建設公司行業(yè)資訊頻道,感謝各位的閱讀!

網站名稱:怎樣深入理解Java多線程與并發(fā)框中的synchronized關鍵字-創(chuàng)新互聯(lián)
轉載源于:http://aaarwkj.com/article36/gjdpg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網站收錄、App設計、網頁設計公司、營銷型網站建設網站排名

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

商城網站建設
精品久久久久久久久无| 久久久国产精品视频网站| 中文字幕久久亚洲一区| av天堂午夜在线观看| 欧美日韩综合人妻丝袜偷拍| 国产日韩手机在线不卡视频| 国产av自拍在线免费观看| 日韩人妻中出中文字幕| 黑人精品少妇一区二区三区| 日吊视频在线免费观看| 精品人妻中文字幕一区有码| 国产精品推荐在线观看| 亚洲黄色片大奶子水多| 91亚洲精品国产一区| 成年人免费视频网站国产| 亚洲国产一区二区三区三州| 日韩精品一区高清视频| 中文字幕av免费专区| 日韩欧美麻豆不卡一区二区| 精品丝袜熟女一区二区三区| 亚洲精品日韩一区二区| 日本道二区视频中文字幕| 国产精品久久99一区| 欧美大片高清在线观看| 麻豆国产原创av色哟哟| 精品久久久久久蜜臀av| 精品国产第一区二区三区| 欧美日韩男女性生活视频| 综合国产精品久久久久久| 精品一区二区在线不卡| 日韩免费视频一区二区三区免费| 国产精品大片一区二区三区四区| 国产三级精品大乳人妇| 92午夜福利在线视频| 日本顶级片一区二区三区| 久久婷婷综合激情亚洲| 日本 午夜 在线 视频| 日本在线免费成人高清| 超碰国产熟女一区二区三区| 亚洲人成网站在线免费看| 日本欧美三级一二三区|