最近工作不是很忙,于是回过头再看看java基础,当时学习单例的时候不太明白为什么要那么写,只是死记硬背老师写的单例的格式,刚把单例常见的两种方式写了一下,顺便做个笔记。在开发过程中推荐使用第二中方法,因为懒汉模式要考虑到线程的同步问题,执行效率要比第二中方法低,当然如果你钟情于第一种也是可以的。
1、懒汉模式:在这种模式下,SingletonTest1进入内存的时候,内存中还没有SingletonTest1的对象,只有在程序调用getInstance方法时程序才创建对象。
package com.temp; public class SingletonTest1 { /** * 单例之懒汉模式 */ private static SingletonTest1 singleon =null; private SingletonTest1(){ } public static synchronized SingletonTest1 getInstance(){ /* * 此处如果没有synchronized时,可能会引起一下情况, * 如果A线程正在执行此处singleon==null时, * B线程刚好执行到 singleon = new SingletonTest1(); * B线程已经创建了singleton对象,而此时A线程判断 singleton==null 刚好是ture A线程就会再创建一个 * singleton对象,这样的话有可能引发程序异常,而我们从代码中却找不到任何问题 */ if(singleon==null){ singleon = new SingletonTest1(); } return singleon; } public static void main(String[] args) { SingletonTest1 s1=SingletonTest1.getInstance(); SingletonTest1 s2=SingletonTest1.getInstance(); SingletonTest1 s3=SingletonTest1.getInstance(); if(s1==s2&& s2==s3){ System.out.println("创建的对象相同"); s1.fun(); }else{ System.out.println("创建的对象不同"); } } public void fun(){ System.out.println("hello word"); } }
2、饿汉模式:所谓的饿汉模式即不管三七二十一先创建singleton对象。
public class SingletonTest { /** * 单例之饿汉模式 */ private static SingletonTest singleon = new SingletonTest(); private SingletonTest(){ } public static SingletonTest getInstance(){ return singleon; } public static void main(String[] args) { SingletonTest s1=SingletonTest.getInstance(); SingletonTest s2=SingletonTest.getInstance(); SingletonTest s3=SingletonTest.getInstance(); if(s1==s2 && s2==s3){ System.out.println("创建的对象相同"); s1.fun(); }else{ System.out.println("创建的对象不同"); } } public void fun(){ System.out.println("hello word"); } }
相关推荐
Java实现单例模式[汇编].pdf
主要介绍了详解Java实现单例的五种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
通过Java语言,主要实现了六种单例的生成方法,包括懒汉式、饿汉式、双重校验锁、枚举、静态内部类,可以根据实际情况选择使用
双重校验锁模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。你可以根据需求选择合适的单例模式实现方式。
饿汉模式在类加载时就创建了实例
懒汉模式是延迟加载的方式,在首次调用getInstance()方法时才会创建实例;
静态内部类模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。
线程安全,使用synchronized关键字
主要介绍了Java实现单例设计模式方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
JAVA实现单例模式的四种方法和一些特点,需要的朋友可以参考一下
一个简单的java工程,包含注释,一目了然,其中包含了单例模式的所有实现方式,懒汉式,饿汉式,双重校验,枚举,静态内部类等方式实现单例。
本篇文章主要介绍了Java实现单例的3种普遍的模式,饿汉式、懒汉式、枚举式。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
有简单又高效的方法可以实现单例模式,但没有一种方式能在任何情况下都确保单例的完整性。 单例模式是指某个类只被实例化一次,用来表示全局或系统范围的组件。单例模式常用于日志记录、工厂、窗口管理器和平台...
详细讲解了Java单例模式的几种实现方式,并有详细的示例配合讲解.
java单例模式的实现方式
单例模式是最简单的一种设计模式,确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例, 本资源提供了用java语言实现简单的单例模式,供初学者参考
java单例模式及实现
作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 PPT详细了单例模式的实现和使用场景