Java中的单例模式
2019独角兽企业重金招聘Python工程师标准>>>
最近网上查找资料做了一下总结,Java中的单例模式主要是有以下两种实现方式:
1、public class SingletonClass{
private static final SingletonClass mInstance = new SingletonClass();
public static SingletonClass getInstance(){
return mInstance;
}
private SingletonClass(){
// to do some initialization
}
}
这种方式利用了Java的类加载机制,将单例变量作为类的静态成员变量,在类加载的时候进行初始化,在get方法可以被调用前完成单例的实例化。
2、public class SingletonClass{
private static SingletonClass mInstance;
private SingletonClass(){
// constructor
}
public static synchronized SingletonClass getInstance(){
if(null == mInstance){
mInstance = new SingletonClass();
}
return mInstance;
}
}
这种方式,是典型的单例实现模式(延迟加载方式,只有在需要使用的时候才去创建它)。为了处理好多线程环境下的单例初始化问题,get方法使用了synchronized关键字确保实例化只有一次。虽然这种方式在多线程环境下可能会带来性能问题,因此有人提出了“Double-Check”的解决方案。
3、 public static SingletonClass getInstance(){
if(null == mInstance){
synchronized(SingletonClass.class){
if(null == mInstance)
mInstance = new SingletonClass();
}
}
return mInstance;
}
这种Double Check的方式在JDK 5.0之前是无效的,因为Java的无序内存写入可能会出现一种情况——同步块外面的if (null == instance)可能看到已存在,但不完整的实例。但是JDK 5.0之后,可以通过将mInstance声明为volatile的以避免该问题。
总结:第一种方法可能会造成资源的浪费(不管该实例是否被用到,它总会在类加载时候去实例化),但是它相对于第二种方法会有执行速度上的优势。所以在日常开发中应根据具体情况使用1或者3的方法。
转载于:https://my.oschina.net/kingguary/blog/37923
Java中的单例模式相关推荐
- 在Java中实现单例模式的有效方法是什么? [关闭]
在Java中实现单例模式的有效方法是什么? #1楼 我使用Spring框架来管理我的单身人士. 它不会强制类的"单一性"(如果涉及多个类加载器,您将无法真正做到),但是它提供了一种 ...
- 20190121——不慕神仙?不羡神仙! java中的单例模式
单例(Singleton)模式是Java中最简单的设计模式之一,这种类型的设计模式属于创建模式,因此模式提供了创建对象的最佳方法之一 这中模式涉及一个类,它负责创建一个对象,同时只要确保创建一个对象, ...
- java单例模式_在Java中实现单例模式
该单例模式保证只有一个带有全局访问点对象可以在给定的时间实例被创建.这是面向对象编程中最常用的技术之一.虽然它很简单,也许从类设计的角度来看最简单,但在尝试实现它们之前,必须先了解一些微妙的问题.本文 ...
- java中的单例模式:懒汉式和饿汉式和静态内部类的书写
饿汉式: public class SingleTon {//1.私有化构造器private SingleTon(){}//2.在类内部创建一个对象private static SingleTon i ...
- java中的单例_细说Java中的几种单例模式
在Java中,单例模式分为很多种,本人所了解的单例模式有以下几种,如有不全还请大家留言指点: 饿汉式 懒汉式/Double check(双重检索) 静态内部类 枚举单例 一.饿汉式 image 饿汉式 ...
- Java中的双重检查锁定
在本文中,我们将介绍在RxJava中创建Singleton对象的一些技术. 最重要的是,我们将学习Java中的双重检查锁定 . Java中的Singleton模式是一种创新模式. 随着时间的流逝,人们 ...
- 关于java中getInstance()方法
关于java中getInstance()方法java 先看一个例子 public abstract class TestInstance { static int i = 1; public stat ...
- java 多线程的单例模式,Java多线程中的单例模式两种实现方式
Java多线程中的单例模式 一.在多线程环境下创建单例 方式一: package com.ietree.multithread.sync; public class Singletion { priv ...
- Java设计模式中的单例模式
有时候在实际项目的开发中,我们会碰到这样一种情况,该类只允许存在一个实例化的对象,不允许存在一个以上的实例化对象,我们将这种情况称为Java设计模式中的单例模式.设计单例模式主要采用了Java的pri ...
最新文章
- SqlServer 导出指定表数据 生成Insert脚本
- python 报错 too many values to unpack (expected 3) 的解决方案
- Source Insight 4怎么取消函数结束提示字符
- web-packwebpack .\src\main.js .\dist\bundle.js 报错
- SAP Spartacus的用户登录页面设计
- jzoj4282-[NOIP2015模拟10.29B组]平方数游戏【构造】
- cmd oracle 连接实例_C#连接Oracle数据库的实例方法
- 【codevs1228】苹果树,哦
- MIT自动驾驶导航系统,不看地图也能穿梭乡间野路
- arcgis栅格邻域统计_运用ArcGIS进行影像分类
- spring源码-第三个后置处理器
- 城市记忆:(一)灵洲----河奇;(二)富平三迁
- 用于视觉问答的相互注意融合模型《Reciprocal Attention Fusion for Visual Question Answering》
- 【Scratch考级99图】图36-等级考试scratch绘制复杂图形中间带凸点正方形花 少儿编程 scratch画图案例教程
- Spring Cloud项目是如何读取bootstrap.properties文件的?
- 禁用wordpress5.2自动裁剪图片功能
- RK3399 Android7/8 system vendor分区挂载参数
- 语音视频聊天的强大技术支持
- 百度/Google 高级搜索语法大全
- 应届生年薪30万,把员工宠上天?测试员在快手工作究竟是什么样的体验?
热门文章
- Working with multiple environments
- Nginx开启GZIP来压缩网页
- fdquery update
- asp.net mvc下的多语言方案 包含Html,Javascript和图片
- python中的中文乱码问题深入分析
- io.h源码 检查文件是否存在
- C++学习点滴(多次调用同一个类)
- c盘python27文件夹可以删除嘛_电脑C盘那些文件夹可以删除
- java获取id值_从另一页获取ID值[重复]
- 论文翻译_做论文翻译需要知道哪些翻译技巧?知行翻译:这3个技巧