雙重檢驗鎖

雙重檢驗鎖:設計模式中的單例模式,細分為單例模式中的懶加載模式。

單例模式

單例模式:指的是一個類只有一個對象。最簡單的實現方式是設一個枚舉類,只有一個對象。缺點是當對象還沒有被使用時,對象就已經創建存在了,對內存的消耗大。

懶漢式和餓漢式

懶漢式:是指使用時才產生對象。

餓漢式:不管用沒用到,一開始就創建好對象。

雙重檢驗鎖的代碼實現(來自菜鳥教程)

**代碼解析**

1.構造方法設為private(私有的)目的是防止外部new對象。因為單例模式只能有一個對象。否則就不是單例模式了。

2.在類里創建一個private的對象,防止外部直接訪問對象。

3.每個線程都是通過getSingleton()方法來獲取對象,相當于一個訪問器。它是靜態的,因為非靜態方法要通過對象來調用,而我們不允許外部創建對象。又因為這個方法是static的,所以上面創建的對象也要static的,因為靜態的方法只能訪問類里靜態的對象。

4.兩個if(singleton==null)的作用)假設有x個線程同時訪問getSingleton()方法想要獲取對象,其中有5個執行到了第一個if(singleton ==null){},開始競爭鎖,第一個競爭成功的向下執行最后得到對象,第二個if(singleton ==null){}是攔截第一個線程外的其他4個線程,(因為第一個線程競爭成功后,singleton就不為null了,第一個if就穿透了,需要后面的第二個if來攔截)這四個線程進入阻塞隊列。如果后面又來了幾個線程訪問getSingleton()方法,會直接被第一個if(singleton ==null){}攔截。

5.volatile的作用是在new完Sigleton()對象后,立即告訴其他線程singleton不為null了。防止已經通過第一個if判斷的線程繼續去競爭鎖。

6.鎖不能加在getSingleton()方法上,而是加在代碼塊上,因為會影響效率,很多線程想要調用該方法,讓其在判斷完if(singleton==null)后再加鎖效率浪費的時間更少。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719038.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719038.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719038.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Backend - 日志記錄

目錄 1. settings.py 文件設定 2. book_log.py 文件設定 3. view 視圖文件調用 1. settings.py 文件設定 文件位置:BookProject 目錄下 LOG_PATH os.path.join(os.getcwd(), logs) # 設定日志文件位置:項目名下的logs文件夾中 2. book_log.py 文…

C++ 創建并初始化對象

創建并初始化C對象 當我們創建一個C對象時,它需要占用一些內存,即使我們寫一個完全為空的類,類中沒有成員,什么也沒有,它至少也要占用一個字節的內存。但是我們類中有很多成員,它們需要存儲在某地方&#…

【擴散模型】生成模型中的Residual Self-Attention UNet 以及 DDPM的pytorch代碼

參考: [1] https://github.com/xiaohu2015/nngen/blob/main/models/diffusion_models/ddpm_cifar10.ipynb [2] https://www.bilibili.com/video/BV1we4y1H7gG/?spm_id_from333.337.search-card.all.click&vd_source9e9b4b6471a6e98c3e756ce7f41eb134 TOC 1 UNe…

視黃酸誘導基因-1敲除誘導樹突狀細胞的不成熟特性并延長異體移植小鼠的存活時間研究【AbMole】

器官移植是一種用于替換因疾病、損傷或其他原因受損的人體器官的醫療程序。盡管器官移植可以挽救生命并顯著提高生活質量,但存在供體器官短缺、排斥反應、器官功能障礙、感染和藥物副作用等問題。為了提高移植成功率和受體健康,需要有效的免疫策略。樹突…

如何使用支付寶沙箱環境本地配置模擬支付并實現公網遠程訪問【內網穿透】

文章目錄 前言1. 下載當面付demo2. 修改配置文件3. 打包成web服務4. 局域網測試5. 內網穿透6. 測試公網訪問7. 配置二級子域名8. 測試使用固定二級子域名訪問 前言 在沙箱環境調試支付SDK的時候,往往沙箱環境部署在本地,局限性大,在沙箱環境…

原理篇-- 定時任務xxl-job-服務端(admin)項目啟動過程--JobFailMonitorHelper初始化 (5)

文章目錄 前言一、JobFailMonitorHelper作用:二、JobFailMonitorHelper源碼內容:2.1 start() 初始化2.1.1 任務失敗重試:2.1.2 任務失敗告警信息發送:2.1.2.1 JobAlarmer 告警類:2.1.2.2 alarm 告警信息發送: 2.2 toStop() 終止線…

數據可視化原理-騰訊-3D網格熱力圖

在做數據分析類的產品功能設計時,經常用到可視化方式,挖掘數據價值,表達數據的內在規律與特征展示給客戶。 可是作為一個產品經理,(1)如果不能夠掌握各類可視化圖形的含義,就不知道哪類數據該用…

壁爐火焰溫和而寧靜,警惕火焰兇猛的潛在危害

在寒冷的冬夜,壁爐散發的溫暖和閃爍的火焰成為家庭的心靈港灣。然而,我們在享受壁爐帶來的溫馨時,有時候也要關注火焰的兇猛度,因為它可能引發一系列潛在危害。 首先,壁爐的火焰過于兇猛可能導致空氣質量下降。當火焰過…

從零開始手寫RPC框架(4)

這一節主要講述網絡傳輸模塊的代碼,并且幾乎每一行代碼都加上了我個人理解的注釋,同時也講述了其中一些以前沒見過的函數,和大致的底層運行邏輯。 目錄 網絡傳輸實體類網絡傳輸實現基于Socket實現網絡傳輸基于Netty實現網絡傳輸客戶端服務端 …

【JavaEE進階】 Linux常用命令

文章目錄 🍃前言🌴ls 與 pwd🚩ls🚩pwd 🎍cd🚩認識Linux目錄結構 🍀touch與cat🚩touch🚩cat 🌲mkdir與rm🚩mkdir🚩rm 🎄cp與…

GD庫沒有安裝FreeType 支持Call to undefined function App\Services\imagettfbbox()

GD庫是一個功能強大的圖像處理庫,廣泛用于生成和處理圖像。然而,默認情況下,GD庫不包含FreeType擴展,該擴展用于處理字體和文本。如果您需要在GD庫中使用更多的字體和文本效果,您可以按照以下步驟安裝和啟用FreeType擴…

十五、單詞造句

描述 GG Bond在和妹妹做一個游戲,GG Bond給定了妹妹一些單詞字符串,他想讓妹妹把這些單詞拼接成以空格間隔開的句子,很可惜妹妹Python沒有學好,你能使用join函數幫幫她嗎? 輸入描述: 多行輸入多個字符串…

Java基礎 - 7 - 常用API(二)

API(全稱 Application Programming Interface:應用程序編程接口) API就是Java幫我們已經寫好的一些程序,如類、方法等,可以直接拿過來用 JDK8 API文檔:Java Platform SE 8 一. Object Object類的作用 Ob…

mybatis多數據源切換

1.前提 項目中有可能需要去其他的數據庫取其他的表的信息 2.思路 2.1 直接使用原生jdbc(不推薦) 2.2 不使用我們全局配置的mybatis,對指定文件夾下使用我們指定的Session 3.解決辦法 指定該配置的范圍 package com.maycur.openapi.dao.my…

『Linux從入門到精通』第 ? 期 - 管道

文章目錄 💐專欄導讀💐文章導讀🐧進程間通信的目的🐧如何進行進程間通信🐧進程間通信的分類🐧管道🐦什么是管道🐦管道原理 🐧實例代碼🐧管道的特點&#x1f4…

Protobuf學習筆記以及序列化的一些概念要點(暫放C++筆記專欄)

Protobuf學習筆記以及序列化的一些概念要點 —— 杭州 2024-03-03 文章目錄 Protobuf學習筆記以及序列化的一些概念要點1.Protobuf概念2.實際測試2.1.準備一個test.proto2.2.使用 protoc 命令行工具來編譯一個 Protocol Buffers 文件 test.proto3.3.創建一個main.cpp寫C++代碼…

mysql 事務的隔離級別

一、事務的隔離級別要解決的問題: 1)臟讀:讀到了其它事務未提交的數據即臟讀,未提交意味著數據有可能會被回滾,也就是最終有可能不會存儲到數據庫中,即讀到了最終不一定存在存在的數據,即為臟讀…

如何選擇程序員職業賽道:挑戰與機遇并存的職業探索指南

程序員如何選擇職業賽道? 作為程序員,選擇職業賽道是一項重要的決策,不僅影響你的職業發展,也影響著你的工作生活。本文將為你介紹如何選擇程序員職業賽道,以及每個方向的特點、挑戰和機遇,幫助你做出明智…

《極客時間 - 左耳聽風》【文章筆記 + 個人思考】

《極客時間 - 左耳聽風》 原文鏈接 :https://time.geekbang.org/column/intro/100002201?tabcatalog 備注:加粗部分為個人思考 01 | 程序員如何用技術變現?(上) 備注:加粗部分為個人思考) 01 | 程序員如何…

Window系統部署Splunk Enterprise并結合內網穿透實現遠程訪問本地服務

文章目錄 前言1. 搭建Splunk Enterprise2. windows 安裝 cpolar3. 創建Splunk Enterprise公網訪問地址4. 遠程訪問Splunk Enterprise服務5. 固定遠程地址 前言 本文主要介紹如何簡單幾步,結合cpolar內網穿透工具實現隨時隨地在任意瀏覽器,遠程訪問在本地…