Java中設計模式之單例設計模式-1

單例作用

  • 1 節省內存
  • 2 可以避免多種狀態導致狀態沖突

單例的創建步驟

  • 1 私有化構造方法
  • 2 私有化聲明的屬性
  • 3 getInstance
  • 4 方法需要靜態

單例分類

1.懶漢式
2.餓漢式

兩種單例區別:

餓漢式 線程安全的
懶漢式 線程不安全的

餓漢式:

package 設計模式之單例;
//餓漢式:
public class HungeryMode {private final static HungeryMode INSTANCE=new HungeryMode();public static HungeryMode getInstance() {return INSTANCE;}private HungeryMode(){}}

懶漢式:

package 設計模式之單例;public class LazyMode {private static LazyMode instance=null;public static LazyMode getInstance() {if(instance==null){instance=new LazyMode();}return instance;}private LazyMode(){}
}

測試:

package 設計模式之單例;public class Test1 {public static void main(String[] args){//餓漢式  HungeryMode instance=HungeryMode.getInstance();HungeryMode instance2=HungeryMode.getInstance();System.out.println("instance="+instance);System.out.println("instance2="+instance2);// 懶漢式LazyMode instance3=LazyMode.getInstance();LazyMode instance4=LazyMode.getInstance();LazyMode instance5=LazyMode.getInstance();System.out.println("instance3="+instance3+","+instance3.hashCode());System.out.println("instance4="+instance4+","+instance4.hashCode());System.out.println("instance5="+instance5+","+instance5.hashCode());}
}

測試結果:
這里寫圖片描述

創建多個對象,測試內存地址,如果相同說明創建的是同一個對象,說明創建的是單例!

延伸—————————–懶漢式線程安全性處理————————–

懶漢式線程不安全原因:

在多線程中,創建單例時,可能出現多個線程進入if(instance==null)執行語句中,在一個線程創建了一個instance后,其他進入執行語句的線程也會接著創建,這樣就會產生多個對象,實現不了單例了,此時不安全了。

代碼:

package 設計模式之單例;public class LazyMode2 {private static LazyMode2 instance=null;private LazyMode2(){}public static LazyMode2 getInstance(){// 雙重檢查if(instance==null){// 為了提高效率   盡可能少的讓線程反復判斷鎖synchronized (LazyMode2.class) {// 靜態方法中 不能使用this 就可以用 本類.class 來代替if(instance==null){instance=new LazyMode2();}}}return instance;}
}

轉載于:https://www.cnblogs.com/TCB-Java/p/6770128.html

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

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

相關文章

Vue 父子組件間的通信

前言 在 Vue 項目中父子組件的通信是非常常見的,最近做項目的時候發現對這方面的知識還不怎么熟練,在這邊做一下筆記,系統學習一下吧。 1 父組件傳值給子組件 1.1 傳值寫法 父組件傳值給子組件,這個就比較常見了,直接用…

夜視儀

國民兵所用F-16的駕駛艙,機員配有夜視鏡以備觀察領空的客機或飛行物體使用夜視鏡時看到的影像夜視儀〈night vision device,簡稱NVD〉,也稱夜視鏡,是透過光學科技強化黑暗中光源的科技裝置,通常用于軍事用途。目前在民…

【物理/數學】—— 概念的理解 moment、momentum

moment:矩,momentum:[物] 動量;動力;沖力; 數學意義上的 moment(矩)概念其實源自于物理范疇。首先我們來介紹物理學意義上的矩(Momentum)的概念。 1. 物理學意…

JAVA多線程實現的三種方式

JAVA多線程實現方式主要有三種:繼承Thread類、實現Runnable接口、使用ExecutorService、Callable、Future實現有返回結果的多線程。 其中前兩種方式線程執行完后都沒有返回值,只有最后一種是帶返回值的。 前兩種省略,著重看看第三種&#xff…

2springboot:快速創建springboot項目

使用IDEA快速創建springboot項目流程&#xff1a; 創建新的項目選擇 項目的命名以及包名 需要什么包就導入什么包 進行測試的單元 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>&…

如何做好渠道銷售?

作者&#xff1a;路人李志強鏈接&#xff1a;https://www.zhihu.com/question/19689177/answer/28508799來源&#xff1a;知乎著作權歸作者所有。商業轉載請聯系作者獲得授權&#xff0c;非商業轉載請注明出處。作為一名一線品牌的渠道銷售&#xff0c;如何讓代理商放棄其他小品…

2017浙江省賽 B - Problem Preparation ZOJ - 3959

地址&#xff1a;http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode3959 題目&#xff1a; Its time to prepare the problems for the 14th Zhejiang Provincial Collegiate Programming Contest! Almost all members of Zhejiang University programming conte…

jQuery導入代碼片段并綁定事件

a.html <div><button class"button" >點我達</button> </div> b.html <html> <head><script type"text/javascript" src"./js/jquery-1.0.1.js"></script><meta http-equiv"Content-Ty…

驗證碼識別

基于Keras&#xff0c;識別簡單的4位字符的驗證碼。 https://github.com/ypwhs/captcha_break

LinCode落單的數

easy 落單的數 查看執行結果 60% 通過給出2*n 1 個的數字&#xff0c;除當中一個數字之外其它每一個數字均出現兩次。找到這個數字。 您在真實的面試中是否遇到過這個題&#xff1f; Yes例子 給出 [1,2,2,1,3,4,3]。返回 4 挑戰 一次遍歷&#xff0c;常數級的額外空間復雜度…

漢邦高科范俊峰:關于透霧攝像機那點事

慧聰安防網訊 生活在北方的人們&#xff0c;隔三差五就和霧霾來一次親密接觸&#xff0c;霧霾對人們的出行和交通有很大的影響&#xff0c;霧霾籠罩之下&#xff0c;人們出行如果闖紅燈、車輛違規行駛發生交通事故&#xff0c;交通監控攝像頭只能“霧里看花”&#xff0c;透霧攝…

SpringBoot注解大全(轉)

原文鏈接&#xff1a;[springBoot系列]--springBoot注解大全 一、注解(annotations)列表 SpringBootApplication&#xff1a;包含了ComponentScan、Configuration和EnableAutoConfiguration注解。其中ComponentScan讓spring Boot掃描到Configuration類并把它加入到程序上下文。…

祭奠我的2018

提前寫這篇文章&#xff0c;是因為深深的感覺到自己的無能 18年伊始&#xff0c;在浪潮干了大半年的我 還沉醉在深深的滿足感中&#xff0c;感覺自己對工作游刃有余 那種自大和自我滿足感充斥著我的心態 已經變得不會學習了 后來有一次機遇&#xff0c;讓我有了跳出舒適的機會 …

工業攝像頭傳感器尺寸與像元尺寸的關系

http://www.mv186.com/show-list.php?id462 在機器自動化行業檢測應用中&#xff0c;工業攝像頭是必備的硬件&#xff0c;而圖像傳感器又是工業攝像頭中最最關鍵核心的東西。圖像傳感器的尺寸&#xff08;靶面大小&#xff09;&#xff0c;往往直接關系到成像的質量。通常來講…

CF-798B

B. Mike and stringstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputMike has n strings s1,?s2,?...,?sn each consisting of lowercase English letters. In one move he can choose a string si, erase the fi…

微信小程序倒計時實現

思路&#xff1a;跟一般js倒計時一樣&#xff0c;主要在于this的變相傳遞。 實現效果&#xff1a; wxml文件部分代碼&#xff1a; common.js文件 : 引用頁JS文件: PS: 1.在data里初始化時間格式&#xff0c;是避免時間加載的第1秒顯示為空白&#xff0c;因為setTimeOut是在1s以…

基于Kubeadm的Flannel分析

Flannel概述 Flannel是將多個不同子網&#xff08;基于主機Node&#xff09;通過被Flannel維護的Overlay網絡拼接成為一張大網來實現互聯的&#xff0c;通過官方的一張網絡拓撲圖我們可以對其基本原理一目了然&#xff1a; 值得探討的是&#xff0c;flannel的這個overlay網絡支…

sensor的skipping and binning 模式

1、第一種理解 關于sensor的縮放存在兩種模式 binning mode 和skip mode skipping mode 就是把想要的數據采集上來 把其余的數據扔掉 如下所示 column skip 2 row skip 2 留下的就是白色的像素 黑色的像素丟掉。 binning mode 就是把相鄰的像素合成一個像素&#xff0c;然后再…

5 結構型模式之 - 適配器模式

5 結構型模式之 - 適配器模式 適配器模式的介紹&#xff1a;適配器模式在開發中使用率很高&#xff0c;適配器是將兩個不兼容的類融合在一起&#xff0c;它有點像粘合劑&#xff0c;將不同的東西通過一種轉換使得它們能夠協作起來。例如經常碰到兩個不相關的類之間進行交互&…

Android進程保活

凡是做過幾年Android開發的&#xff0c;都不能不面對進程保活這一問題。特別是這兩年&#xff0c;面對谷歌&#xff0c;國內定制ROM&#xff0c;安全軟件等多方圍剿的情況下&#xff0c;app在后臺保活的難度越來越大&#xff0c;可以說包括QQ、微信在內的所有app&#xff0c;都…