单例模式中懒汉式和恶汉式

1、单例模式:
一、懒汉式:
//懒汉式单例类.延迟加载,在第一次调用的时候实例化自己
public class SingleTon{
private static SingleTon instance;
private SingleTon(){}
public static synchronized SingleTon getInstance(){//这种方式在方法上加同步,每次调用该方法都要同步
if(instance==null){
instance = new SingleTon();
}
return instance;
}
}

public static SingleTon getInstance(){//双重检查锁定,只有第一次调用单例的时候才会做同步
if(instance==null){
synshronized(SingleTon.class){
if(instance==null){
instance = new SingleTon();
}
}
}
return instance;
}

public class SingleTon{//利用了classloader的机制来保证初始化instance时只有一个线程,所以也是线程安全的,同时没有同步的性能损耗
private static class LazyHolder{
private static SingleTon instane = new SingleTon();
}
private SingleTon(){}
public static SingleTon getInstance(){
return LazyHolder.instance;
}
}

二、恶汉式:
//饿汉式单例类.在类初始化时,已经自行实例化,天生线程安全
public class SingleTon{
private static SingleTon instance = new SingleTon();
private SingleTon(){}
public static SingleTon getInstance(){
return instance;
}
}

时间: 2024-08-15 07:44:51

单例模式中懒汉式和恶汉式的相关文章

单例设计模式懒汉式和恶汉式

一,单例设计模式懒汉式和恶汉式 懒汉式在类加载时不初始化,延迟加载.(配置文件) 饿汉式在类加载时初始化,加载慢,获取对象快. 饿汉式是线程安全的, 懒汉式需要加synchronized,否则不安全. 二,饿汉式 1 public class Singletonehan { 2 private static Singletonehan singleton=new Singletonehan(); 3 private Singletonehan() { 4 } 5 public static Si

单例模式中的饿汉式单例和懒汉式单例

饿汉式单例: 懒汉式单例 原文地址:https://www.cnblogs.com/jyfby/p/8961600.html

Java设计模式之单例模式(恶汉式和懒汉式)

/* * 单例模式: *         饿汉式:类一加载就创建对象 *         懒汉式:用的时候,才去创建对象 * 面试题:单例模式的思想是什么?写一个代码体现(我们最好写懒汉式的单例模式给面试官,这个才是他想要的答案) *         开发使用:恶汉式(是不会出问题的单例模式) *         面试时写懒汉式(可能会出现问题的单例模式) *             A:懒汉式(延迟加载) *             B:线程安全问题 *                 a:是

Java实现单例模式之恶汉式、懒汉式、枚举式,带测试。

Java实现单例的3种普遍的模式,恶汉式.懒汉式.枚举式. 具体代码如下: package com.lcx.mode; /** * * 恶汉式单例,不管以后用不用这个对象,我们一开始就创建这个对象的实例, * 需要的时候就返回已创建好的实例对象,所以比较饥饿,故此叫恶汉式单例. * @author qq1013985957 * */ public class SingletonHanger { private static final SingletonHanger instance = new

单例模式的两种形式(恶汉式,懒汉式)

单例模式的特点:解决了一个类在内存的唯一性,这个类的对象只有一个. 写单例模式的步骤: 1. 私有修饰构造方法 2. 在本类的成员位置, new 自己类的对象 3. 提供一个静态方法,返回本类的对象 A: 恶汉式 package demo01; /** * 单例设计模式恶汉式 * @author Administrator * */ public class SingleDesignModel1 { //私有构造方法 private SingleDesignModel1(){ } //在自己的成

单例模式之懒汉式与饿汉式

懒汉式单例 package single;?public class Monitor { //开始没有班长,用静态属性表示 private static Monitor monitor=null; //构造方法私有化,防止出现多个班长对象 private Monitor(){}; public static Monitor getmonitor(){ if(monitor==null){ monitor=new Monitor(); } return monitor; }} 首先班里没有班长,用

单例模式(饿汉式单例模式与懒汉式单例模式)

首先弄清楚什么是单例模式? 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案 单例模式的特点:(单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例) 1.该类只能有一个实例 2.该类只能自己创建这个唯一实例,且别人对该类无法创建实例 3.该类提供一个公开的方法public

对Java单例设计模式中懒汉式类定义的讨论

全世界人民都知道单例设计模式中类的定义分为懒汉式和饿汉式两种,然而今天并不是要把它们做横向比较.实际上,不论饿汉式类的代码看起来有多么美轮美奂,在实际开发中它的效率总是不如懒汉式的.然而在笔试和面试中懒汉式的出镜率可以说是比饿汉式不知道高到哪里去了,因此把它完全弄懂应该是十分有必要的. 饿汉式: class Single1 { int num = 1; private static Single1 single1 = new Single1(); private Single1(){} stat

单例模式之懒汉模式&恶汉模式

单例模式,其实就是对于一个类,只能新建一个对象,不能有多个重复的对象.这样使得在程序在运行时,比如日志加载时能找到唯一的对象,以至正确匹配.就类似于一山不能有二虎一样.主要的思想其实就是运用static,在类内部new一个自己的对象,再通过类方法返回这个对象.由于静态方法new出的对象,故其实有着同样的hashCode,也即同一个对象.一下是代码: Test.java package com.demo_type; public class Test { public static void ma