java单例,懒汉&饿汉

 * 单例模式Singleton

 * 应用场合:有些对象只需要一个就足够了,如皇帝

 * 作用: 保证整个应用程序中某个实例有且只有一个

 * 区别: 饿汉模式的特点是加载类时比较慢,但运行是比较快-线程安全

          懒汉模式的特点是加载类时比较快,但运行时比较慢-线程不安全

1.饿汉

 1 //饿汉式单例类.在类初始化时,已经自行实例化 

 2 public class Singleton1 {
 3     //私有的默认构造子
 4     private Singleton1() {}
 5     //已经自行实例化
 6     private static final Singleton1 single = new Singleton1();
 7     //静态工厂方法
 8     public static Singleton1 getInstance() {
 9         return single;
10     }
11 }

2.懒汉

 1 //懒汉式单例类.在第一次调用的时候实例化
 2 public class Singleton2 {
 3     //私有的默认构造子
 4     private Singleton2() {}
 5     //注意,这里没有final
 6     private static Singleton2 single=null;
 7     //静态工厂方法
 8     public synchronized  static Singleton2 getInstance() {
 9          if (single == null) {
10              single = new Singleton2();
11          }
12         return single;
13     }
14 }
时间: 2024-09-29 09:06:09

java单例,懒汉&饿汉的相关文章

单例模式(懒汉式单例、饿汉式单例、登记式单例)

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建.这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象. 注意: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 介绍 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点.

Java-Singleton(单例创建-饿汉式,懒汉式)

package com.easygo.singleton; /** * Java单例有两种方式,饿汉式和懒汉式,饿汉式是在对象创建之前加载,优先于对象,而懒汉式是在对象创建完成后调用对象的方法来创建对象 * ,了解JVM加载原理的都清楚,正真意义上的单例是饿汉式,在对象创建之前加载. * @author lx * */ public class Singleton { //饿汉式 public static Singleton singleton=null; static { singleton

详谈单例、饿汉、和懒汉模式

一.基本概念 单例模式属于创建型设计模式. 确保一个类只有一个实例,并提供该实例的全局访问点. 实现: 使用一个私有构造函数.一个私有静态变量以及一个公有静态函数来实现. 二.结构 类图: 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量. 三.几类经典单例模式实现 1.懒汉式-线程不安全 下面的实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资

关于单例(饿汉式与懒汉式)

饿汉式单例: 1 package com.mon11.day27.single; 2 /** 3 * 类说明 : 4 * @author 作者 :chenyanlong 5 * @version 创建时间:2017年11月27日 6 */ 7 public class SingleTon { 8 // 饿汉式 线程全 9 private static SingleTon singleTon=new SingleTon(); 10 /*1.构造方法私有化*/ 11 private SingleTo

4创建型模式之单例模式__多线程下的懒汉式单例和饿汉式单例

//1"懒汉"模式虽然有优点,但是每次调用GetInstance()静态方法时,必须判断 //      NULL == m_instance,使程序相对开销增大. //2多线程中会导致多个实例的产生,从而导致运行代码不正确以及内存的泄露. //3提供释放资源的函数 讨论:   这是因为C++中构造函数并不是线程安全的. C++中的构造函数简单来说分两步: 第一步:内存分配 第二步:初始化成员变量 由于多线程的关系,可能当我们在分配内存好了以后,还没来得急初始化成员变量,就进行线程切换

设计模式课程 设计模式精讲 8-5 单例设计模式-饿汉式

1 代码讲解 1.1 饿汉式不会出现多线程问题 1.2 优点和缺点 2 代码演练 2.1 代码演练1(饿汉式) 2.2 代码演练2(静态块方式实现) 1 代码讲解 1.1 饿汉式不会出现多线程问题 刚开始加载的时候就完成了初始化,避免了线程同步问题, 1.2 优点和缺点 优点:刚开始加载的时候就完成了初始化,避免了线程同步问题. 缺点:如果该类不经常使用,比较消耗资源,造成内存浪费. 2 代码演练 2.1 代码演练1(饿汉式) package com.geely.design.pattern.c

Java 单例

最近在网上看到一篇关于 Java 单例的创建问题,虽然是一个 Java 程序员,但是到现在还没有真正的深入了解到 Java 的原理和机制.所以每每看到这样能够"真正"接触 Java 的机会内心总是充满了欣喜.记录下,以后备用. 懒汉模式 public class Singlton{ private static Singleton instance; private Singlton(){} public static Singlton getInstance(){ if(instac

java单例-积木系列

一步步知识点归纳吧,把以前似懂非懂,了解表面,知道点不知道面的知识归一下档. 懒汉式单例: 私有化构造函数,阻止外界实例话对象,调用getInstance静态方法,判断是否已经实例化. 为什么是懒汉,因为它是属于延迟加载这个实例的,也就是说不用到的时候,不实例化对象的. public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInst

javascript单例模式(懒汉 饿汉)

第一种:懒汉模式 var Singleton=(function(){ var instantiated; //比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢 function init(){ /*这里定义单例代码*/ return{ publicMethod:function(){ console.log('helloworld'); }, publicProperty:3 }; } return{ getInstance:function(){ if(!insta