Java设计模式(一)——单例模式
简介
定义: 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。
单例类拥有一个私有构造函数,确保用户无法通过 new 来直接实例化它。类中包含一个静态私有成员变量与静态公有的工厂方法,该方法负责检验实例的存在性,如果不存在久实例化自己,然后存储在静态成员变量中,确保只有一个实例类被创建。
- 饿汉模式:在类被加载的时候将自己实例化,无需考虑多线程并发冲突的问题。初始化加载的时间可能会较长。优点是线程安全,执行效率高;缺点是浪费内存,容易产生垃圾。
- 懒汉模式:类在第一次使用的时候创建,需要通过双重检查锁定等机制防止多线程冲突,导致系统性能降低。优点是不浪费内存,缺点是需要保证线程安全,效率低一点。
双重检查锁存在问题: 当第一个判断得到不为null的时候,对象可能还没有完成初始化。对象的初始化和内存地址分配可能会被重排序,所以讲instance声明为volatile就不会发生重排序《Java并发编程的艺术》
代码
public class SingletonEH {
private static SingletonEH instance = new SingletonEH();
private SingletonEH (){}
public static SingletonEH getInstance() {
System.out.println("instance:"+instance);
System.out.println("加载饿汉式....");
return instance;
}
}
public class SingletonLHsyn {
private volatile static SingletonLHsyn instance;
private SingletonLHsyn (){
System.out.println("加载懒汉式....");
}
public static SingletonLHsyn getInstance() {
if (instance == null) {
synchronized(SingletonLHsyn.class) {
if (instance == null) {
instance = new SingletonLHsyn();
}
}
}
return instance;
}
}
Java设计模式(一)——单例模式的更多相关文章
- java 设计模式之单例模式
-------Success is getting what you want, happiness is wanting what you get. java设计模式之单例模式(Singleton) ...
- 折腾Java设计模式之单例模式
博文原址:折腾Java设计模式之单例模式 单例模式 Ensure a class has only one instance, and provide a global point of access ...
- Java设计模式之单例模式(七种写法)
Java设计模式之单例模式(七种写法) 第一种,懒汉式,lazy初始化,线程不安全,多线程中无法工作: public class Singleton { private static Singleto ...
- Java 设计模式之单例模式(一)
原文地址:Java 设计模式之单例模式(一) 博客地址:http://www.extlight.com 一.背景 没有太多原由,纯粹是记录和总结自己从业以来经历和学习的点点滴滴. 本篇内容为 Java ...
- java设计模式1——单例模式
java设计模式1--单例模式 1.单例模式介绍 1.1.核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 1.2.常见场景 1.3.单例模式的优点 1.4.常见的五种单例模式实现 ...
- java设计模式之单例模式你真的会了吗?(懒汉式篇)
java设计模式之单例模式你真的会了吗?(懒汉式篇) 一.什么是单例模式? 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供 ...
- java设计模式之单例模式(几种写法及比较)
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...
- java设计模式- (1)单例模式
参加校园招聘的笔试,发现公司都会考一些java设计模式,所以上网查询相关内容,总结常用的几种单例模式. 单例模式(Singleton Pattern)是 Java中最简单的设计模式之一.这种类型的设计 ...
- [转]JAVA设计模式之单例模式
原文地址:http://blog.csdn.net/jason0539/article/details/23297037 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主 ...
- java设计模式之单例模式(七种方法)
单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...
随机推荐
- 丢了ceph.mon.keying解决办法
在linux操作系统下,可能因为一些很小的误操作,都会造成非常重要的文件的丢失,而文件的备份并不是每时每刻都会注意到,一般是等到文件丢失了才会去想办法,这里讲下ceph.mon.keyring丢失的解 ...
- CSS属性(display)
1.display属性 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset= ...
- Math.floor(Math.random() * array.length),splice
1.Math.floor(Math.random() * array.length) 返回长度内的索引 eg: changeLimit () { function getArrayItems(arr, ...
- .Net 开源项目 FreeRedis 实现思路之 - Redis 6.0 客户端缓存技术
写在开头 FreeRedis 是一款继 CSRedisCore 之后重写的 .NET redis 客户端开源组件,以 MIT 协议开源托管于 github,目前支持 .NET 5..NETCore 2 ...
- 面经分享!蚂蚁金服三面被拒,重拾起鼓四面猿辅导成功拿下offer!
前言 一直有小伙伴要我分享面经,说自己想面互联网公司,无奈经验太少想多看看其他人是怎么面的.我这两天刚好和一个刚拿到猿辅导offer的朋友吃了个饭,他向我说了说自己的面试经历.粉丝朋友是末流211毕业 ...
- MyBatis学习01
1.初识MyBatis 环境说明: jdk 8 + MySQL 5.7.19 maven-3.6.1 IDEA 学习前需要掌握: JDBC MySQL Java 基础 Maven Junit 什么是M ...
- 关于oracle11g 和sqldeverloper的安装配置
0友情提示:以下下载地址都是我的百度云分享链接安全无毒请放心下载! 电脑配置 win10 jdk版本1.7 下载oracle11G 版本 下载地址:安装很简单 sqldverloper(oracleD ...
- CDR征稿-CorelDRAW征文活动开始啦!
学习平面设计的小伙伴对CorelDRAW一定不陌生,CorelDRAW和Photoshop.illustrator以及 InDesign是做设计必备的四款工具.如果您是CorelDRAW专家.培训讲师 ...
- Word2 word输入公式+文字转表格
1.word中输入 =rand() -点击回车键-会随机生成一段文字-可用作排版练习/虚拟的文字排版设计 ##也可以为=rand(2,3)等,括号里可以随即填写其他数字,最后生成文字字数等不一样 2. ...
- spring中的事务传播机制
1.事务的实现思想 在spring中要想某个方法具有事务,只要在方法前加一个@Transactional注解.然后spring就会利用aop思想,在这个方法执行前开启事务, 在方法执行后选择提交事务或 ...