Java 单例模式实现
饿汉式
线程安全,调用效率高,但是不能延时加载。
public class Singleton {private static Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance(){return instance;}
}
懒汉式
调用效率不高,但是能延时加载。
如果方法没有 synchronized
,单例没有 volatile
, 则线程不安全。
public class Singleton {private static Singleton instance = null;private Singleton(){}public static synchronized Singleton getInstance(){if(instance == null) {instance = new Singleton();}return instance;}
}
懒汉式改良
线程安全,使用了 double-check-lock(双重检查锁),即check-lock-check,目的是为了减少同步的开销。
volatile关键字来修饰 instance
,其最关键的作用是防止指令重排。
public class Singleton {private volatile static Singleton instance = null;private Singleton() {}public static Singleton getInstance() {if(instance == null) {synchronized (Singleton.class) {if(instance == null) {instance = new Singleton();}}}return instance;}
}
静态内部类实现
线程安全,调用效率高,可以延时加载。静态内部类不会在 Singleton
类加载时就加载,而是在调用 getInstance()
方法时才进行加载,达到了懒加载的效果。
public class Singleton {private Singleton() {}public static Singleton getInstance(){return SingletonFactory.singletonInstance;}private static class SingletonFactory{private static Singleton singletonInstance = new Singleton();}
}
枚举实现
线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用。
public enum Singleton {INSTANCE;private String instance;Singleton() {instance = new String("singleton");}public String getInstance(){return instance;}
}
Java 单例模式实现相关推荐
- Java单例模式个人总结(实例变量和类变量)
Java单例模式 背景知识:Static关键字. 在对于定义类的变量,分为两种,是否具有static修饰的变量: 没有static修饰的变量,通过类的实例化(对象)引用,改变量称为实例变量: 使用st ...
- Java 单例模式探讨
以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...
- Java单例模式优化写法
转载自 http://blog.csdn.net/diweikang/article/details/51354982 Java单例模式优化写法 方法一:推荐 [java] view plain co ...
- Java单例模式的几种实现方式
Java单例模式的几种实现方式 在Java 中,单例类只能有一个实例,必须创建自己的唯一实例,单例类必须给所有其他对象提供这一实例.Java 单例模式有很多种实现方式,在这里给大家介绍单例模式其中的几 ...
- Java 单例模式:懒加载(延迟加载)和即时加载
Java 单例模式:懒加载(延迟加载)和即时加载 引言 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制(或懒加载.延时加载),也就是说只有当使用到这个实例的时候才会创 ...
- Java单例模式:为什么我强烈推荐你用枚举来实现单例模式
写在前面--原作的这篇文章真的写的非常的简洁,逻辑清晰,将Java单例模式的各种写法写的非常清楚,并介绍了用枚举实现单例的最佳实践. 单例模式简介 单例模式是 Java 中最简单,也是最基础,最常用的 ...
- java单例模式 三种_三种java单例模式概述
在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的.Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种.下 ...
- 什么是java单例模式?
关于java单例模式的文章早已是非常多了,本文是对我个人过往学习java,理解及应用java单例模式的一个总结.此文内容涉及java单例模式的基本概念,以及什单例模式的优缺点,希望对大家有所帮助. 什 ...
- 比心app源码,Java 单例模式
比心app源码,Java 单例模式实现的相关代码 概述:单例模式是指在内存中永远只有一个类的实例. 有利于节约内存和保证共享计算的结果正确,方便管理. 单例模式的形式 饿汉式单例:在获取单例对象之前对 ...
- Java单例模式及开发应用场景
一.Java单例模式是什么? 所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该由人来控制,而应该由代码来限制,强制单例. 二.为什么要用单例模式? 单例有其独有的使用场景,一般是对于那些业 ...
最新文章
- linux test数字txt,Linux26期 7月4日预习笔记
- OpenCV新手入门,如何用它平移缩放和旋转图片
- Java功底之Reference
- 税务审计SAP需要用表
- u盘读写测试_关于闪迪u盘cz880速度测试
- 如何成为一位数据科学家(图灵访谈)
- 200行代码实现视频人物实时去除
- sklearn之Multioutput 估计器
- STM32工作笔记0022---STM32F1开发版 GPIO口工作原理
- 舒尔特表-最终版 js
- 已删除的QQ好友聊天记录怎么查看
- 总结js实现字符串转JSON对象的几种方法
- oracle数据库技术_创建 pdb数据库
- 计网习题总结,附答案
- 数字化时代,如何提高企业的交易管理效率?
- opencv将16位灰度图片转化为8位
- win12 修改dns脚本
- VISIO无法插入到word,ppt中
- 多目标优化算法:多目标变色龙群优化算法MOCSA(提供MATLAB源码)
- Android GMS Checklist【Android gms认证自检表】
热门文章
- 谷歌翻译软件-大家都在下载的谷歌翻译软件
- 【题】【贪心】NKOJ3827 火车运输
- GET,POST和PUT的区别
- 1、python冒泡排序和快排
- 复现Oriented R-CNN RTX 2080Ti
- 五洲制冷中央空调西门子S7-200 PLC控制系统程序 PLC和屏程序
- 2021年2月16日 星期二 农历初五 晴 天津
- [GXOI/GZOI2019]逼死强迫症
- 用ul制作html表单,要利用 display属性把段落P、标题h1、表单form、列表ul和li都可以定义成行内块元素,其属性值为...
- 线段树(区间修改)模板题 Luogu 2357 守墓人