Java实现单例模式
1,单例模式
解法一:只适用于单线程:
package com.singleton;import sun.security.jca.GetInstance.Instance;public class Singleton1 {private static Singleton1 instance = null;public Singleton1() {}public static Singleton1 getInstance() {if (instance == null) {instance = new Singleton1();}return instance;}public static void main(String[] args) {// TODO Auto-generated method stub Singleton1 s1 = getInstance();Singleton1 s2 = getInstance();System.out.println(s1==s2);}}
解法二:适用于多线程但效率不高----在getInstance()上加synchronized加锁
package com.singleton;public class Singleton1 {private static Singleton1 instance = null;public Singleton1() {}public static synchronized Singleton1 getInstance() {if (instance == null) {instance = new Singleton1();}return instance;}public static void main(String[] args) {// TODO Auto-generated method stub Singleton1 s1 = getInstance();Singleton1 s2 = getInstance();System.out.println(s1==s2);}}
解法三:改进的多线程单例----不需要整个方法加锁,只需要创建时加锁
package com.singleton;public class Singleton1 {private static Object lock = new Object();private static Singleton1 instance = null;public Singleton1() {}public static Singleton1 getInstance() {if (instance == null) {synchronized (lock) {if (instance == null) {instance = new Singleton1();}}}return instance;}public static void main(String[] args) {// TODO Auto-generated method stub Singleton1 s1 = getInstance();Singleton1 s2 = getInstance();System.out.println(s1==s2);}}
解法四(强烈推荐):利用静态构造函数
package com.singleton;public class Singleton2 {private static Singleton2 instance = new Singleton2();public static Singleton2 getInstance() {return instance;}public static void main(String[] args) {// TODO Auto-generated method stub Singleton2 s1 = getInstance();Singleton2 s2 = getInstance();System.out.println(s1 == s2);}}
原理:类成员变量只在类加载时初始化一次。
解法五(强烈推荐):
package com.singleton;public class Singleton3 {private static class SingletonHolder {private final static Singleton3 instance = new Singleton3();}public Singleton3() {}public static Singleton3 getInstance() {return SingletonHolder.instance;}public static void main(String[] args) {Singleton3 s1 = getInstance();Singleton3 s2 = getInstance();System.out.println(s1 == s2);}}
因为SingletonHolder内部类只有在显式被调用时才会加载,所以只有在调用getInstance方法时才会实例化instance,这样就解决了解法四加载过早的问题。
转载于:https://www.cnblogs.com/IvySue/p/7529001.html
Java实现单例模式相关推荐
- Java学习-----单例模式
一.问题引入 偶然想想到的如果把Java的构造方法弄成private,那里面的成员属性是不是只有通过static来访问呢:如果构造方法是private的话,那么有什么好处呢:如果构造方法是privat ...
- Java 的单例模式
Java 的单例模式 单例模式(Singleton) 单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法.如果我们要让类在一个 ...
- Java 进阶——单例模式
一.单例模式概念及特点 Java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必 ...
- Java创建单例模式(singleton)的几种实现方式
JAVA的单例模式(singleton) 一.什么是单例模式? 1. 优点 2. 缺点 3. 使用场景 二.什么是线程安全和非线程安全? 1.线程安全 2.非线程安全 3.线程安全与不安全的本质区别 ...
- Java 设计模式 - 单例模式
Java 设计模式 - 单例模式 作者: 霍英俊 [huo920@live.com] 文章目录 Java 设计模式 - 单例模式 单例设计模式介绍 单例设计模式八种方式 饿汉式 - 静态常量 饿汉式( ...
- java之单例模式祥解
java之单例模式祥解 收藏 转自javaeye的作者calmness,看完以后我很佩服,他的连接地址: http://www.javaeye.com/topic/60179 概要 单例模式是最简单的 ...
- java中单例的应用_浅谈Java中单例模式的几种应用
目录 浅谈Java中单例模式的几种应用 第一种:懒汉式 第二种:饿汉式 第三种:双重检索式 第四种:注册登记式 第五种:内部类形式 浅谈Java中单例模式的几种应用 日常开发中,为了提高我们系统中对象 ...
- java设计模式---单例模式
关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便萌生了写这篇文章的念头.企图 ...
- Java 实现单例模式的 9 种方法
一. 什么是单例模式 因进程需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 单例模式只能有一个实例. 单例类必须创建自己的唯一实 ...
- Java设计模式——单例模式的七种写法
单例模式(Singleton) 单例模式(Singleton)是一种常用的设计模式.在Java应用中,单例模式能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处: 1.某些类创建比较频 ...
最新文章
- ubuntu安装OpenCV详细教程(建议收藏)
- 推荐收藏 | 算法工程师常见面试问题及相关资料汇总
- iOS开发网络——数据缓存
- 超级干货:关于数据中台的深度思考与总结
- phpAmin如何导入导出大数据文件?
- 典型关联分析CCA(canonical correlation analysis)
- idea 注释模板_常用的模板函数
- linux挂载光盘装ftp服务,linux ftp安装和配置
- hive 把mysql语句执行_Hive SQL 语句的执行顺序
- 街篮服务器维修时间,全新花式技能系统 《街头篮球》春节前夕版本上线
- ceoi2017 Building Bridges(build)
- 帆软报表Tomcat 发布部署
- mysql测评作业指导书_测评作业指导书
- 深大与南科大计算机,深圳大学和南方科技大学你选哪所?哪所实力更强?
- VMware: 虚拟机报错 ( 虚拟化性能计数器需要至少一个可正常使用的计数器, 模块 “VPMC“ 启动失败 , 未能启动虚拟机 )
- html 未读消息红点,消息未读之点不完的小红点(Node+Websocket)
- 中国AI觉醒 阿里王坚:云智能将成为大趋势
- 跪了!美团Android开发工程师岗位职能要求,重难点整理
- 如何将多个PDF文件合并为一个PDF,4种工具推荐,适用手机和PC
- K2 BPM介绍(1)