今天复习了一下java的单例模式,写了懒汉式和饿汉式的实现例子。代码如下:

1.懒汉式单例

package com.lf.shejimoshi;

/**
* @classDesc: 类描述:(懒汉式单例测试类)
* @author baobaolan
* @createTime 2018年1月10日
* @version v1.0
*/
public class SingletonTest {
/**
* @functionDesc: 功能描述:(测试懒汉式单例模式)
* @author baobaolan
* @createTime 2018年1月10日
* @version v1.0
*/
public static void main(String[] args) {
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
System.out.println(s1==s2);
} } /**
* @classDesc: 类描述:(学生类)
* @author baobaolan
* @createTime 2018年1月10日
* @version v1.0
*/
class Student{ //定义全局变量
private static Student student; //私有化构造函数
private Student(){ } /**
* @functionDesc: 功能描述:(对外暴露方法)
* @author baobaolan
* @createTime 2018年1月10日
* @version v1.0
*/
public static Student getStudent(){
if(student==null){
//加上同步锁,保证线程安全
synchronized(Student.class){
student = new Student();
}
}
return student;
}
}

2.饿汉式单例

package com.lf.shejimoshi;

/**
* @classDesc: 类描述:(测试类)
* @author baobaolan
* @createTime 2018年1月10日
* @version v1.0
*/
public class Singleton2Test { public static void main(String[] args) { Teacher teacher1 = Teacher.getTeacher();
Teacher teacher2 = Teacher.getTeacher();
System.out.println(teacher1==teacher2); } } /**
* @classDesc: 类描述:(饿汉式单例)
* @author baobaolan
* @createTime 2018年1月10日
* @version v1.0
*/
class Teacher{
//类加载的时候初始化一次
private static final Teacher teacher = new Teacher();
//私有化构造函数
private Teacher(){
super();
}
/**
* @functionDesc: 功能描述:(对外暴露的方法)
* @author baobaolan
* @createTime 2018年1月10日
* @version v1.0
*/
public static Teacher getTeacher(){
return teacher;
} }

3.总结

  懒汉式线程不安全,需要加上同步锁,同步锁影响了程序执行效率。

饿汉式天生线程安全,类加载的时候初始化一次对象,效率比懒汉式高。

JAVA单例模式:懒汉式,饿汉式的更多相关文章

  1. java单例模式(饿汉式和懒汉式)

    1 /* 2 * 设计模式:对问题行之有效的解决方式.其实它是一种思想. 3 * 4 * 1,单例设计模式 5 * 解决的问题:就是可以保证一个类在内容中的对象唯一性. 6 * 7 * 必须对于多个程 ...

  2. java中的单例模式(懒汉式+饿汉式)

    什么是单例模式: 单例模式既只能在自己本类中创建有且唯一的一个实例(姑且不考虑映射的情况)通过方法将该实例对外公开 第一种:单例模式-懒汉式 既调用getInstance()方法返回实例之前判断有没有 ...

  3. java基础10 单例模式之饿汉式和懒汉式单例

    前言: 软件行业中有23中设计模式 单例模式    模版模式    装饰者模式    观察者模式    工厂模式    ........... 单例模式 1. 单例模式包括 1.1 饿汉式单例 1.2 ...

  4. Spring -11 -单例设计模式 -懒汉式/饿汉式(idea默认的)

    单例设计模式 作用: 在应用程序有保证最多只能有一个实例. 好处: 2.1 提升运行效率. 2.2 实现数据共享. 案例:application 对象 懒汉式 3.1 对象只有被调用时才去创建. 3. ...

  5. Java单例模式之饿汉模式与懒汉模式

    单例模式是我们在开发软件的过程中经常用到的23中常用的java模式之一,主要的功能就是保证我们所使用的对象只有一个,这也在一方面减少了出错的可能性,增强了代码的健壮.单例模式一般来说有两种实现的方式, ...

  6. scala:分别使用懒汉式和饿汉式实现单例模式

    在java中,单例模式需要满足以下要求: 构造方法私有化,使得本类之外的地方不能使用构造方法new出对象 提供私有静态属性,接收单例对象 公共的.静态的getInstance方法,便于外界拿到单例对象 ...

  7. Java单例模式《一》饿汉式

    package com.study.mode; /** * 单例模式:饿汉式. 线程安全. * @ClassName: SingleBean * @author BlueLake * @date 20 ...

  8. java设计模式单例模式 ----懒汉式与饿汉式的区别

    常用的五种单例模式实现方式 ——主要: 1.饿汉式(线程安全,调用率高,但是,不能延迟加载.) 2.懒汉式(线程安全,调用效率不高,可以延时加载.) ——其他: 1.双重检测锁式(由于JVM底层内部模 ...

  9. 关于Java单例模式中懒汉式和饿汉式的两种类创建方法

    一. 什么是单例模式 因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必须创建 ...

随机推荐

  1. React Native常用组件之ScrollView组件

    一.前言 从iOS开发的经验来看,scrollView无疑是移动开发中很重要的一个组件,比如后面会学到的ListView就是继承自它.那么,在开发中比如:焦点图.引导页等地方都有其的影子,那接下来我们 ...

  2. Spring_事务准备

  3. 分布式技术 webapi 路由追加html、aspx、shtml 适用于 对接 安卓、IOS

    首先是这样,在对接安卓和IOS或者是第三方调用的接口,我需要在服务端返回一个带.html/.aspx这样后缀的接口. 例子如下图:http://localhost:64131/api/UsersInf ...

  4. MVC viewbag & viewdata

    弱类型:ViewData[""] 动态型:ViewBag dynamic ViewData 是字典型的(Dictionary),ViewBag 不再是字典的键值对结构,而是dyna ...

  5. ubuntu 支持中文

    1.cat /usr/share/i18n/SUPPORTED 说明:查看系统支持的字符集,你需要注意的是支持字符集的格式,如对中文会有以下一些显示(我的系统如此,我不知是否普遍) zh_CN.GB1 ...

  6. python之websocket

    一.websocket WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与服务器全双工 ...

  7. scala学习手记23 - 函数值

    scala的一个最主要的特性就是支持函数编程.函数是函数编程中的一等公民:函数可以作为参数传递给其他函数,可以作为其他函数的返回值,甚至可以在其它函数中嵌套.这些高阶函数称为函数值. 举一个简单的例子 ...

  8. angularjs分页组件

    这是我第一次写博客,激动,首先,我也是个菜鸟,分享一下自己写的服务器端分页的代码,自己一步一步写的,其中也有参考别人的代码.技术比较渣,先这样了. // ====== 2019-1-3 ======/ ...

  9. cmake的使用方法

    4. CMakeLists.txt剖析4.1 cmake_minimum_required命令 cmake_minimum_required (VERSION 2.6) 规定cmake程序的最低版本. ...

  10. git常用操作 配置用户信息、拉取项目、提交代码、分支操作、版本回退...

    git常用操作 配置用户信息.拉取项目.提交代码.分支操作.版本回退... /********git 配置用户信息************/ git config --global user.name ...