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.mzph.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;都…