实现单例模式四种方法--java
单例模式(Singleton Pattern)属于创建型模式,它确保在同一个进程内,单例类只有一个对象,并且 该对象对所有其他对象提供访问,常见的如Windows系统下的资源管理器、Spring Bean等都会采用这种方式。
一般来说,正确实现单例有如下几点要求:
将其构造方法设为私有;
防止对象在初始化被多个线程同时运行;
确保该对象不可序列化;
确保该对象无法克隆。
下面举例介绍实现单例模式的四种方法:
一、利用枚举实现单例:
利用枚举实现单例时,枚举类的静态成员变量的初始化在构造方法之后执行,构造方法中不要操 作静态成员变量。
enum RecommandSingleton {SINGLETON;public void doSomething() {}
}
二、利用静态内部类实现单例:
final class RecommandSingleton {private static class SingletonHolder {static final RecommandSingleton INSTANCE = new RecommandSingleton();}private RecommandSingleton() {}public static RecommandSingleton getInstance() {return SingletonHolder.INSTANCE;}
}
三、利用Spring的依赖注入能力实现单例(其他诸如Guice、Dagger等也可以实现):
@Component
class RecommandSingleton {public void doSomething() {}
}@Component
class SomeServiceImpl {private final RecommandSingleton singleton;@Autowiredpublic SomeServiceImpl(RecommandSingleton singleton) {this.singleton = singleton;}
}
四、双重检查锁
把 instance 声明为 volatile ,当一个线程初始化 Singleton 对象时,会在这个线程和 其他任何获取该实例的线程之间建立起happens-before关系。避免使用到未初始化完全的对象引用。
final class Singleton {private static volatile Singleton instance = null;private static final Object LOCK = new Object();private Singleton() {...}public static Singleton getSingletonInstance() {if (instance == null) {synchronized (LOCK) {if (instance == null) {instance = new Singleton();}}}return instance;}
}
实现单例模式四种方法--java相关推荐
- java连接sql server2008_java连接sql-server-2008的四种方法
<java连接sql-server-2008的四种方法>由会员分享,可在线阅读,更多相关<java连接sql-server-2008的四种方法(11页珍藏版)>请在人人文库网上 ...
- Java创建并执行线程的四种方法
Java创建并执行线程的四种方法 java里面创建线程有四种方式: 无返回: 实现Runnable接口,重写run(); 继承Thread类,重写run(); 有返回: 实现Callable接口,重写 ...
- html获取data-*值,html5 获取和设置data-*属性值的四种方法讲解
1.获取id的对象 2.需要获取的就是data-id 和 dtat-vice-id的值 一:getAttribute()方法 const getId = document.getElementById ...
- java 中lock,java中lock获取锁的四种方法
在java接口中会存放着许多方法,方便线程使用时的直接调用.对于lock接口大家都不陌生,我们已经初步对概念进行了理解.那么在获取锁的方法上想必还不是很清楚.下面我们就lock获取锁的四种方法分别进行 ...
- 详解Java解析XML的四种方法
http://developer.51cto.com 2009-03-31 13:12 cnlw1985 javaeye 我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...
- Java 判断字符串是否为空的四种方法、优缺点与注意事项
以下是Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s)); 方法二: ...
- 【转】Java中字符串中子串的查找共有四种方法(indexof())
原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下: 1.int ...
- java多线程传值覆盖_Java 多线程传值的四种方法
其实大家都知道多线程传值有三种方式: 1:通过构造方法传递数据 2:通过变量和方法传递数据 3:通过回调函数传递数据 那么博主有个非常变态的需求,所以找出了第四种实现方式,先看效果图: 动态Cron4 ...
- java互换_两个变量交换的四种方法(Java)
对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 //创建一个类 3 { 4 public ...
最新文章
- 给大家分享一个私藏已久的Python神器!
- 论坛报名 | 智能信息检索与挖掘的最新进展和挑战
- node JS獲取GPS_Node.js 14 正式发布:V8 引擎升级,新增异步本地存储 API
- 混合代码块 Markdown Leedcde
- 如何抓取所有域用户的hash(win2008--win2012)
- JavaScript设计模式与开发实践 - 单例模式
- C++公有、私有、保护继承的关系
- Spark SQL从入门到精通
- 桌面上的计算机打不开怎么办,电脑桌面计算机打不开怎么办
- Elastic基本概念
- [转]Android 上百实例源码分析以及开源分析
- 一个最简单的Delphi2010的PNG异形窗口方法
- 磁盘与文件系统管理详解
- 华中科技大学计算机组成,华中科技大学计算机组成原理.pptx
- [Kudu基础]--Kudu+Impala介绍 | 微店数据科学团队博客
- Ansible相关笔记1
- Xcode的几个编译设置
- 在vivado里用rtl描述_Vivado中两种RTL原理图的查看方法和区别
- 2021年慈溪横河中学高考成绩查询,慈吉中学 2020慈溪市普高排名一览表
- 《自动控制原理》(胥布工版)习题2-21
热门文章
- Pico neo3 Unity开发笔记
- MacBookPro截图神器 - Snipaste
- 在网页中添加3D模型并通过Mysql更新其位置
- Science特刊:……万能的生物钟
- python财务数据分析代码_人力和财务都可以学的Python数据分析实战
- 登录服务器显示太忙怎么办,吃鸡总提示服务器太忙怎么办 | 手游网游页游攻略大全...
- 考研失败是什么体验?
- Python实现录屏
- 辞职了要不要退微信群,如果要,如何“优雅地退群”?
- DataGridView打印专家组件2.5版正式发布