用java創建一個單例模式,采用Java實現單例模式

一. 背景

單例模式是指在內存中只會創建且僅創建一次對象的設計模式。在程序中多次使用同一個對象且作用相同時,為了防止頻繁地創建對象使得內存飆升,單例模式可以讓程序僅在內存中創建一個對象,讓所有需要調用的地方都共享這一單例對象。- 引自這篇回答:https://zhuanlan.zhihu.com/p/160842212

另外在學習單例模式的過程中,書上有提到,枚舉類型是線程安全的,再加上其本身就不可以繼承的特性,所以無論是《設計模式》的作者還是很多優秀的開源代碼的實現都采用了枚舉來實現單例設計模式。那么問題來了,為什么枚舉類型是線程安全的呢?

二. 枚舉類型是線程安全的的原因

三. 具體的代碼例子

/**

* 七種單例設計模式模式之:枚舉方式實現V2.0 單例設計模式,

* 采用類似Holder的方式,使其可以實現lazy load。

*/

public class Singleton {

private byte[] data = new byte[1024];

private Singleton() {

}

private enum EnumHolder {

INSTANCE;

private Singleton instance;

EnumHolder() {

this.instance = new Singleton();

}

public Singleton getSingleton() {

return instance;

}

}

public static Singleton getInstance() {

return EnumHolder.INSTANCE.instance;

}

}

//代碼出自《Java高并發編程詳解:多線程與架構設計(汪文君 著)》第14章

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

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

相關文章

ci mysql 轉義,CI(CodeIgniter)框架中URL特殊字符處理與SQL注入隱患分析

本文實例分析了CI(CodeIgniter)框架中URL特殊字符處理與SQL注入隱患。分享給大家供大家參考,具體如下:php CI框架中URL特殊字符有很多是不支持的,導致像c,括號這些常用的分類,字符都無法正常顯示很頭痛,而在…

es6判斷對象key是否存在,ES6中獲取對象的key

ES6中獲取對象的keyconst json {‘a‘: 123, ‘b‘: 321};Object.keys(json).forEach(key > {window.console.log(key);}); // [a,b]ES6一共有五種方法可以遍歷對象的屬性。for ... in:循環遍歷對象自身的和繼承的可枚舉的屬性(不包含Symbol屬性)Object.keys(ob…

招投標體統JAVA源代碼,JSP 招投標管理系統(畢業設計)源碼

一、源碼特點JSP 招投標管理系統 是一套完善的畢業設計系統,對理解JSP java編程開發語言有幫助,系統具有完整的源代碼和數據庫,系統主要采用B/S模式開發。二、功能介紹主要功能:(1)權限管理:對權限信息進行添加、刪除、…

java+timer+退出,java timer 兌現在指定時間執行方法

java timer 實現在指定時間執行方法最近在弄一個定時發送的項目,需要定時執行方法,于是用到了Timer,但是我想要的功能網絡上的資源比較少,所以自己研究了一下。下面是我寫的一些代碼import java.util.Calendar;import java.util.D…

linux下安裝mysql5.7.19,Linux下MySQL5.1升級到高版本MySQL5.7.19詳解 | zifangsky的個人博客...

一 數據備份(1)查看當前版本:Shell[rootcentos ~]# mysql -V1[rootcentos~]# mysql -V(2)備份數據:Shell[rootcentos ~]# mysqldump -u root -h 127.0.0.1 -P 3306 -p --all-databases > databases.sql1[rootcentos~]# mysqldump -u root -h 127.0.0.…

mysql event使用,用MySQL的Event設置定時任務執行sql語句 | 老瘋子

想在每天某個特定時間段定時執行一條sql語句命令,來進行數據庫的備份或者更新刪除等,可以直接使用MySQL自帶的定時任務Event事件來執行操作。需要注意的是Event事件是在MySQL 5.1版本中新增的,還有一點就是確保你有MySQL數據庫的root管理權限…

php如何配置微信公眾號環境,微信公眾平臺開發之配置與請求

一、配置參數define(WEIXIN_APPID, wxzzzzzzzz);define(WEIXIN_APPSECRET, ouewjdsaudsamkh);define(WEIXIN_TOKEN, 9973833232232);define(WEIXIN_NOTIFY_URL, http://xx.com/xx/xx);define(WEIXIN_MCHID, 322221121);define(WEIXIN_KEY, xddsdswewew);1)微信公眾號開發中IDWE…

MATLAB設置x為0到10所有數,MATLAB教學_10數值微積分

本文學習視頻地址:https://www.bilibili.com/video/av68228488?p10課堂PPT以及本人學習代碼已上傳。本文學習內容:多項式的微分和積分數值的微分和積分目錄多項式的表示方法polyval()polyder()16分鐘練習conv()polyint()Numerical Differentiation39分鐘…

php header 404 nginx,ThinkPHP在nginx下怎么設置?路由統統404,瘋了~

本地用MAMP跑的代碼,運行沒問題。但是部署到CENTOS 6.8 NGINX服務器上的時候,路由地址都404了![可以訪問] http://something.com/API/public/index.php[404] http://something.com/API/public/index.php/consult_add折騰一晚上了。。簡直了&a…

vue怎么使用php調取數據,vue 數據操作

pushpopshiftunshiftsplicesortreverse{{ item.message }} #var example new Vue({el: #example,data: {items: [{message: Foo },{message: Bar },{message: Baz }],addValue:{message:match}},methods:{push(){//接收任意數量的參數,把它們逐個添加到數組末尾&am…

php strchr 截斷,PHP strchr() 函數

w3school 教程PHP String 函數查找 "world" 在 "Hello world!" 中的第一次超并返回此字符串的其余個別:echo strchr("Hello world!","world");?>運行實例strchr() 函數搜他串在另一字符串中的第一次常該函數是 strstr(…

matlab與專業應用,MATLAB應用技術--在電氣工程與自動化專業中的應用

第1章 MATLAB基本知識.1.1 MATLAB簡介1.1.1 概述1.1.2 MATLAB安裝與運行1.2 MATLAB的基本操作1.2.1 MATLAB語言結構1.2.2 MATLAB常用命令1.2.3 MATLAB的M文件1.2.4 輸入與輸出函數1.3 MATLAB的矩陣運算1.3.1 矩陣的實現1.3.2 矩陣的運算1.4 MATLAB的向量運算1.5 MATLAB的控制語…

php 單一職責原則,Laravel深入學習8 - 單一責任原則

聲明:本文并非博主原創,而是來自對《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當然也不是原汁原味的翻譯,能保證90%的原汁性,另外因為是理解翻譯,肯定會有錯誤的地方,歡迎指正。…

matlab aic sic,sic是什么意思_sic的翻譯_音標_讀音_用法_例句_愛詞霸在線詞典

全部In the mud -- En ange e il mondo ! [ sic ] ( 6 )污泥里 —— Efangoeilmondo! ( 六 )漢英文學 - 圍城Fixed - seal & rotational - seal are made of various msterials, SIC, Carbon, Ceramic and can withstand various chemicals.固定環 及 轉動環由各種不同材質…

centos6.3 nginx php,CentOS 6.3下nginx、php-fpm、drupal快速部署

一切本著從簡原則來做,能yum/rpm的,堅決不手工編譯 :)本次部署環境基于CentOS 6.3 x86_64系統。0. 準備工作#更新yum[rootimysql ~]# yum -y update[rootimysql ~]# yum install libaio-devel.x86_64#drupal 8.0需要用到curl模塊[rootimysql ~]# yum ins…

鏈路追蹤php,easyswoole鏈路追蹤

TrackerEasyswoole提供了一個基礎的追蹤組件,方便用戶實現基礎的服務器狀態監控,與調用鏈記錄。組件要求php: >7.1.0ext-swoole: ^4.4.0easyswoole/component: ^2.0安裝方法composer require easyswoole/tracker倉庫地址調用鏈Easyswoole的調用鏈跟蹤…

razor java,如何在Razor中聲明局部變量?

我正在asp.net mvc 3中開發一個Web應用程序。我對它很新。 在使用剃刀的視圖中,我想聲明一些局部變量并在整個頁面中使用它。 如何才能做到這一點?能夠執行以下操作似乎相當微不足道:bool isUserConnected string.IsNullOrEmpty(Model.Creat…

amp 符號 php,php中引用符號(amp;)的使用詳解_PHP教程

與C語言中的指針是有差別的.C語言中的指針里面存儲的是變量的內容在內存中存放的地址變量的引用.PHP 的引用允許你用兩個變量來指向同一個內容復制代碼 代碼如下:$a"ABC";$b &$a;echo $a;//這里輸出:ABCecho $b;//這里輸出:ABC…

oracle ora 00283,【案例】Oracle報錯ORA-16433非歸檔丟失redo無法啟動的恢復過程

天萃荷凈Oracle研究中心案例分析:運維DBA反映Oracle數據庫處理非歸檔模式,redo文件損壞常規修復無法正常open數據庫。本站文章除注明轉載外,均為本站原創: 轉載自love wife & love life —Roger 的Oracle技術博客本文鏈接地址…