Java 5种单例模式
指某个类中只能存在一个对象实例,并且该类中只提供一个取得其对象实例的方法
优点:减少系统性能开销
应用场景:网站的计数器,任务管理器,回收站等
*/
//优点:线程安全,调用效率高,同时实现了延时加载
public class Singleton1 {
//私有化构造器
private Singleton1(){
}
//私有化静态内部类,并创建一个静态内部类变量
private static class SingletonClassInstance{
private static final Singleton1 instance = new Singleton1();
}
//定义公共的静态的方法,返回当前类的对象
public static Singleton1 getInstance(){
return SingletonClassInstance.instance;
}
}
//单例模式2--懒汉式
//好处-- 延时加载,节省内存空间
//坏处 -- 线程不安全
class Singleton2 {
//私有化构造器
private Singleton2(){
}
//私有化对象
private static Singleton2 instance;
//获取对象
public static Singleton2 getInstance(){
if(instance == null){
instance = new Singleton2();
}
return instance;
}
}
//优点 -- 线程安全
//缺点 -- 没有延时加载,类加载之后会占用内存空间
class Singleton3{
//私有化构造器
private Singleton3(){
}
//私有化一个不可变对象
private static final Singleton3 instance = new Singleton3();
//获取对象
public static Singleton3 getInstance(){
return instance;
}
}
//单例模式4 -- 枚举
//优点 -- 类初始化时就加载这个对象,线程安全.方法没有同步,调用效率高。避免了反射和反序列化的漏洞
//缺点 -- 没有延时加载
enum Singleton4{
//定义一个枚举对象
INSTANCE;
//定义需要的方法
public void singletonOperation(){
}
}
//优点 -- 将同步内容下放到if内部,提高了执行效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了
//缺点 -- 由于编译器优化原因和JVM底层内部模型的原因,偶尔会出问题,不建议使用
class Singleton5{
private Singleton5(){
}
private static Singleton5 instance = null;
public static Singleton5 getInstance(){
if(instance == null){
Singleton5 sc;
synchronized ( Singleton5.class){
sc = instance;
if(sc == null){
synchronized(Singleton5.class){
if(sc == null){
sc = new Singleton5();
}
}
instance = sc;
}
}
}
return instance;
}
}
Java 5种单例模式的更多相关文章
- Java几种单例模式的实现与利弊
饿汉式 提前new出来实例了,并不是在第一次调用get方法时才实例化,没有进行延迟加载 public class Singleton1 { private static Singleton1 inst ...
- Java中的五种单例模式实现方法
[代码] Java中的五种单例模式实现方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2 ...
- Java中的五种单例模式
Java模式之单例模式: 单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例. 特点: 1,一个类只能有一个实例 2 自己创建这个实例 3 整个系统都要使用这个实例 例: 在下面 ...
- Java设计模式之单例模式(七种写法)
Java设计模式之单例模式(七种写法) 第一种,懒汉式,lazy初始化,线程不安全,多线程中无法工作: public class Singleton { private static Singleto ...
- java中的几种单例模式
目前比较常见的有4种(DCL为懒汉模式的线程安全版本). 单例模式的实现一般需要满足以下条件: 1.构造方法私有化,实例属性私有化. 2.必须仅在类的内部完成实例的初始化过程. 3.提供公共静态方法, ...
- Core Java之7种单例模式
初始化空 初始化创建 一把锁 两把锁 大专栏 Core Java之7种单例模式"headerlink" title="静态内部类">静态内部类 静态加载 ...
- 7、java实现的两种单例模式
/* 两种单例模式的演示 */ //饿汉式 class Signal { private Signal(){} private Signal s = new Signal(); public stat ...
- java设计模式- (1)单例模式
参加校园招聘的笔试,发现公司都会考一些java设计模式,所以上网查询相关内容,总结常用的几种单例模式. 单例模式(Singleton Pattern)是 Java中最简单的设计模式之一.这种类型的设计 ...
- Java中的单例模式
单例模式: public class Person{ public static Person per; //定义一个静态变量,用来存储当前类的对象 private Person() //构造一个私有 ...
随机推荐
- JAVA笔记23-IO流(1)
一.流的概念和分类 JAVA程序中,对于数据的输入.输出操作以“流”(stream)方式进行:J2SDK提供了各种各样的“流”类,用以获取不同种类的数据:程序中通过标准的方法输入或输出数据. java ...
- org.springframework.web.servlet.view.ContentNegotiatingViewResolver
restful服务中一个重要的特性就是一种资源可以有多种表现形式,在springmvc中可以使用ContentNegotiatingViewResolver这个视图解析器来实现这种方式. 描述资源的三 ...
- layui 获取iframe层的window
success: function (layero, index) { var iframeWin = $("div.layui-layer-content > iframe" ...
- 两个i标签之间有缝隙
给i标签的父元素设置font-size:0:
- webapi 参数的请求和接收
数据传递和接收1.数据头为User-Agent: FiddlerAccept: application/xml; charset=utf-8Host: localhost:1258Content-Le ...
- C语言 - C语言简介
一.C语言的发展史 C语言的发展离不开B语言,我们先从B语言说起.在1970年时,贝尔实验室的肯.汤姆逊将BCPL语言进行修改,由于肯.汤姆逊是从BCPL语言进行修改,因此,此时B语言就诞生了,B的含 ...
- Windows10 + VS2015 (Win SDK10)环境下的64位 VTK编译小结
之前在学习vtk过程中,感觉vtk的编译还是很简单的,基本上不会碰到什么棘手的错误.但是,当我在Win10+VS2015这个环境下配置时,却遇到了麻烦.经过一番折腾之后,终于将vtkbian编译成功了 ...
- Spring Boot教程(二)关于RabbitMQ服务器整合
准备工作 15min IDEA maven 3.0 在开始构建项目之前,机器需要安装rabbitmq,你可以去官网下载,http://www.rabbitmq.com/download.html ,如 ...
- js for循环中i++与++i有什么区别
平时都是这样写的for循环, 1 2 3 for(var i = 0; i < 20 ; i++){ .... } 但我看有的人这样写 for (var i = 0; ...
- NOIP2018初赛划水记
尽管初赛好像没什么好写的,但还是以此作为我的第一篇游记吧. 前夜 本来以为初赛水(去年分数线36来着),几周前做了一套普及组的卷子90多分感觉良好就没管了(不明白那些专门花时间看初赛书的人),结果Mr ...