内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

前置知識

梅縣網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)成立與2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

  • 了解Java基本語法
  • 了解多線程基本知識

知識介紹

  • Synchronized簡介:作用、地位、不控制并發(fā)的后果
  • 兩種用法:對象鎖類鎖
  • 多線程訪問同步方法的7種情況:是否是static、Synchronized方法等
  • Synchronized的性質(zhì):可重入、不可中斷
  • 原理:加解鎖原理、可重入原理、可見性原理
  • Synchronized的缺陷:效率低、不夠靈活、無法預(yù)判是否成功獲取鎖
  • 常見問題:

  • 如何選擇Lock或Synchronized等
  • 如何提高性能、JVM如何解決那個線程獲取鎖等

Synchronized簡介

作用

官方解釋

同步方法支持一種簡單的策略來防止線程干擾和內(nèi)存一致性錯誤:如果一個對象對多個線程可見,則對該對象變量的所有讀取或?qū)懭攵际峭ㄟ^同步方法完成的。

通俗易懂的解釋

能夠保證在同一時刻最多只有一個線程執(zhí)行該段代碼,以達到保證并發(fā)安全的效果。

地位

  • Synchronized是Java的關(guān)鍵字,被Java語言原生支持

代碼演示:不使用并發(fā)手段的后果演示

代碼實戰(zhàn):兩個線程同時a++,最后結(jié)果會比預(yù)計的少

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

原因

count++,它看上去只是一個操作,實際上包含了三個動作:

  1. 讀取count
  2. 將count加1
  3. 將count的值寫入到內(nèi)存中
  • 最基本的互斥同步手段
  • 并發(fā)編程中的元老級角色,是并發(fā)編程的必學(xué)內(nèi)容

Synchronized的兩個用法

對象鎖

包括方法鎖(默認(rèn)鎖對象為this當(dāng)前實例對象)和同步代碼塊鎖(自己指定鎖對象)

代碼塊形式:手動指定鎖對象

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

方法鎖形式:synchronized修飾普通方法,鎖對象默認(rèn)為this

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

?類鎖

概念(重要):Java類可能有很多個對象,但只有1個Class對象

本質(zhì):所以所謂的類鎖,不過是Class對象的鎖而已

用法和效果:類鎖只能在同一時刻被一個對象擁有

形式1:synchronized加載static方法上

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

形式2:synchronized(*.class)代碼塊

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

?消失的請求解決方案

不使用并發(fā)手段會有什么后果?如何解決?

?解決問題

兩個線程同時a++,最后結(jié)果會比預(yù)計的少

原因

?  count++,它看上去知識一個操作,實際上包含了三個動作

  1. 讀取count
  2. 將count+1
  3. 將count的值寫入到內(nèi)存中

方法一

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

?方法二

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

?方法三

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

七種常見情況之123

多線程訪問同步方法的7種情況

  1. 兩個線程同時訪問一個對象的同步方法
  2. 兩個線程訪問的是兩個對象的同步方法
  3. 兩個線程訪問的是synchronized的靜態(tài)方法
  4. 同時訪問同步方法與非同步方法
  5. 訪問同一個對象的不同的普通同步方法
  6. 同時訪問靜態(tài)synchronized和非靜態(tài)synchronized方法
  7. 方法拋異常后,會釋放鎖

情況一:

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

?情況二:

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

?情況三:

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

?情況四:

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

?情況五:

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

?情況六:

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

情況七:

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

?7種情況總結(jié)

?3點核心思想

  1. 一把鎖只能同時被一個線程獲取,沒有拿到鎖的線程必須等待(對應(yīng)第1、5種情況)
  2. 每個實例都對應(yīng)有自己的一把鎖,不同實例之間互不影響;例外:鎖對象鎖是*.class以及Synchronized修飾的是static方法的時候,所有對象共用同一把鎖(對應(yīng)第2、3、4、6種情況);
  3. 無論是方法正常執(zhí)行完畢或者方法拋出異常,都會釋放鎖(對應(yīng)第7種情況)

Synchronized缺陷

  • 效率低:鎖的釋放情況少、試圖獲得鎖時不能設(shè)定超時、不能中斷一個正在試圖獲得鎖的線程
  • 不夠靈活(讀寫鎖更靈活):加鎖和釋放的時機單一,每個鎖僅有單一的條件(某個對象),可能是不夠的
  • 無法知道是否成功獲取到鎖

一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷

?常見面試問題

1、使用注意點:鎖對象不能為空、作用域不宜過大、避免死鎖

2、如何選擇Lock和Synchronized關(guān)鍵字?

3、多線程訪問同步方法的各種具體情況

網(wǎng)站標(biāo)題:一文看透Java高并發(fā):Synchronized鎖的性質(zhì)、原理及其缺陷
分享URL:http://www.rwnh.cn/article16/jsdogg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)移動網(wǎng)站建設(shè)、網(wǎng)站排名、面包屑導(dǎo)航、定制網(wǎng)站

廣告

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

成都網(wǎng)站建設(shè)公司
耒阳市| 河池市| 天台县| 襄垣县| 张北县| 武平县| 迁西县| 法库县| 梓潼县| 烟台市| 无为县| 永清县| 潜江市| 六安市| 新源县| 新宁县| 隆尧县| 汾阳市| 财经| 乌拉特后旗| 宜兰市| 乐亭县| 泽普县| 突泉县| 聊城市| 延寿县| 普陀区| 长顺县| 房山区| 新余市| 监利县| 天镇县| 隆昌县| 厦门市| 克拉玛依市| 万载县| 龙山县| 平湖市| 于都县| 佛冈县| 陇川县|