【经典结构】单例模式Singleton
单例模式Singleton
1.含义
单例模式:即一个类只能创建一个实例。
- 只有一个实例 --> 不可以从类外new对象 --> 构造器私有化private --> 从类里创建实例;
- 这个对象供外部使用 --> 该实例的get方法 --> 没有对象,随着类加载 --> 方法声明为static --> 静态只能调静态 --> 该实例也声明为static;
2.实现
2.1 饿汉式
public class Singleton(){
//1.私有化构造器;
private Singleton();
//2.创建实例;静态;
private static Singleton singleton = new Singleton();
//3.获取实例的公共方法;静态;
public static Singleton getSinggleton(){
return singleton;
}
}
特点
多线程安全:是;
lazy初始化:否;
类加载就创建实例,浪费内存;
2.2 懒汉式,线程不安全
public class Singgleton(){
private Singleton();
private static Singleton singleton; //延迟创建对象;
public static Singleton getSingleton(){
if(singleton == null){ //调用方法的时候没有了再创建;
singleton = new Singleton();
}
return singleton;
}
}
特点
多线程安全:否 (当有多个线程操作时,可能会有多个线程都经过if判断语句,就会创建多个实例,造成线程不安全);
lazy初始化:是;
2.3 懒汉式,线程安全
public class Singleton(){
private Singleton();
private static Singleton singleton;
//给方法加锁;
public static synchronized Singleton getSingleton(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
特点
多线程安全:是
lazy初始化:是
效率:低(每次都只是一个线程拿到锁,调用方法,多个线程无法同时调用方法)
2.4 双重检验锁
public class Singleton(){
private Singleton();
//使用volatile声明:
//1.禁止指令重排;
//2.保证变量修改后对所有线程可见,指示JVM,这个变量是共享且不稳定的,每次用要到主存中去读取;
private volatile static Singleton singleton();
public static Singleton getSingleton(){
if(singleton == null){ //判断有没有实例化过,没有再进入加锁模式,这样绝大多数的都不会再进入了;
synchronized(Singleton.class){
if(singleton == null){ //再判断一次,因为可能有多个线程都经过了前面的if,if不判断就会创建多个对象了;
singleton == new Singleton();
}
}
}
return singleton;
}
}
多线程安全:是
lazy初始化:是
效率:高
- 第一个检验是为了效率;
- 第二个检验为了线程安全;
直接加锁再判断 --> 效率低;
先判断再加锁 --> 效率高;
【经典结构】单例模式Singleton的更多相关文章
- 【白话设计模式四】单例模式(Singleton)
转自:https://my.oschina.net/xianggao/blog/616385 0 系列目录 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factor ...
- 单例模式——Singleton
模式分类: 从目的来看: 1.创建型(Creational)模式:负责对象创建. 2.结构型(Structural)模式:处理类于对象间的组合. 3.行为型(Behavioral)模式:类与对象交互中 ...
- 设计模式 单例模式(Singleton) [ 转载2 ]
设计模式 单例模式(Singleton) [ 转载2 ] @author java_my_life 单例模式的结构 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类 ...
- 设计模式 笔记 单例模式 Singleton
//---------------------------15/04/09---------------------------- //Singleton 单例模式-----对象创建型模式 /* 1: ...
- 设计模式系列之单例模式(Singleton Pattern)——确保对象的唯一性
模式概述 模式定义 模式结构图 饿汉式单例与懒汉式单例 饿汉式单例 懒汉式单例 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 主要优点 适用场景 说明:设计模式系列文章是读刘伟所著 ...
- 设计模式之单例模式——Singleton
设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...
- ooad单例模式-Singleton
单例模式Singleton 主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 比如建立目录 ...
- iOS单例模式(Singleton)写法简析
单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...
- 浅谈设计模式--单例模式(Singleton Pattern)
题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡 ...
随机推荐
- 对标 Spring Boot & Cloud ,轻量框架 Solon 1.4.14 发布
Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...
- selenium 隐式等待与显式等待
1.隐式等待:driver.implicitly_wait() driver = webdriver.Chrome()driver.implicitly_wait(10) #获取元素时最多会等 ...
- 技术实践:教你用Python搭建gRPC服务
摘要:gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf序列化协议开发,且支持众多开发语言. 本文分享自华为云社区& ...
- div和img垂直居中的方法
div垂直居中可以使用height和line-height,多个div的话就不适用了. 可以使用下面的方式垂直居中 <div class="parent"> <d ...
- 05 找出占用CPU、内存过高的进程
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin echo "----- ...
- 10、ssh中scp、sftp程序详解
每次都是全量拷贝,rsync是增量拷贝 10.1.scp的基本用法: -r:拷贝目录; -p: 保持属性: -l:限速设置; scp -P52113 /etc/hosts lc@172.16.1.41 ...
- web自动化页面元素不能键盘输入
一.背景 web自动化中存在一部分元素属性是readonly属性,导致我们在使用自动化代码的时候无法使用sendkeys()方法传入数据,以12306网站选择出发日期为例,见下图 二.json语句处理 ...
- bcprov-jdk15-145.rar
javapdf文件操作,加密包 bcprov-jdk15-145.rar https://files.cnblogs.com/files/blogs/692137/bcprov-jdk15-145.r ...
- 资源:docker离线安装包下载路径
docker安装包下载路径: docker所有版本:https://download.docker.com/linux/static/stable/
- Spring:Spring中bean的生命周期
Spring中,从BeanFactory或ApplicationContext取得的实例为Singleton(单例模式),就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使 ...