单例模式--饿汉、懒汉、多线程以及多线程下改进

代码注释有介绍

package singleton;

/**
 * @author: ycz
 * @date: 2018/12/24 0024 22:15
 * @description: 懒汉模式
 */
public class SingleTon1 {
    public SingleTon1(){}
    private static SingleTon1 instance1 = null;

    public static SingleTon1 getInstance1(){
        if (instance1==null){
            instance1 = new SingleTon1();
        }
        return instance1;
    }
}
package singleton;

/**
 * @author: ycz
 * @date: 2018/12/24 0024 22:21
 * @description: 饿汉模式
 */
public class SingleTon2
{
    private SingleTon2(){}
    private static final SingleTon2 instance2 = new SingleTon2();

    public static SingleTon2 getInstance2(){
        return instance2;
    }
}
package singleton;

/**
 * @author: ycz
 * @date: 2018/12/24 0024 22:32
 * @description: 解决多线程问题(在创建单例时加锁)
 */
public class SingleTon3 {
    private SingleTon3(){}
    private static SingleTon3 instance3 = null;
    public static synchronized SingleTon3 getInstance3(){
        if (instance3 == null){
            instance3 = new SingleTon3();
        }
        return instance3;
    }
}
package singleton;

/**
 * @author: ycz
 * @date: 2018/12/24 0024 22:36
 * @description: 在方法上加锁效率低下;可以先判断是否有创建过单例,如果没有在加锁创建
 */
public class SingleTon4 {

    private SingleTon4(){}

    private static final Object myLocker = new Object();

    private static SingleTon4 instance4 = null;

    public static SingleTon4 getInstance4(){
        if (instance4 == null){
            synchronized (myLocker){
                instance4 = new SingleTon4();
            }
        }
        return instance4;
    }
}

这是SingleTon1(饿汉式)时会出现的问题。

原文地址:https://www.cnblogs.com/hyczzz/p/10171472.html

时间: 2024-11-10 23:02:48

单例模式--饿汉、懒汉、多线程以及多线程下改进的相关文章

Java-设计模式-单例模式-饿汉模式、懒汉模式

//-------------------------------------------------------------饿汉模式--开始----------------------------------------------------------- package com.study.DesignPattern01; /** * 创建一个饿汉模式的单例 * @author ZLHome *有些对象,我们只需要一个,如果多了,那么就可能导致数据不一致, 占用资源过多等等,比如: 配置文

单例模式 饿汉式 ARC

有了前两篇的文章这里直接给出代码,这种方法不是纯粹的饿汉式,比较懒汉式代码会容易一点点,但是苹果官方不推荐,了解一下就好. 此时没有多线程的困扰,使用之前就创建一个单例对象,此时还没有线程.所以不需要加锁. static id _instance = nil; +(void)load{//该类加载之后load就会被自动调用, _instance = [[self alloc] init]; } alloc new 都会来到这里,所以在这里重写更合适. + (id)allocWithZone:(s

单例模式 饿汉与饱汉

饱汉式 :有线程安全问题,加锁 public class Singleton { private Singleton(){}//构造器私有化,外部不能直接创建. private static Singleton instance=null; public synchronized static Singleton getInstance(){ //同步方法,保证线程安全. if(instance==null){ instance=new Singleton(); } return instanc

单例模式-饿汉模式

哈哈哈 这下内容要多 不知道效果怎么样 1 public class Single{ 2 3 private static Single single = new Single(); 4 5 private Single(){} 6 7 public static Single getInstance(){ 8 return single; 9 } 10 11 } 不知道对不对呀

java GOF23单例模式-饿汉式图

原文地址:https://blog.51cto.com/14437184/2439983

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

1 //单例模式---懒汉模式 2 public class Apple{ 3 //创建一个成员,在内存中只有一个拷贝 4 private static Apple apple = null; 5 private Apple(){ 6 7 } 8 //这个方法用来创建实例 9 public static Apple Instance(){ 10 if(appel == null){ 11 Apple apple = new Apple(); 12 } 13 return apple; 14 }

单例模式[ 懒汉模式 | 饿汉模式 ]

程序开发中,有些对象只需要一个,比如 配置文件/ 工具类/ 线程池/ 缓存/ 日志对象等.只需要一个单例模式: 可以保证某些对象在程序运行中只有唯一的一个实例.显然单例模式的要点有三个:一是某个类只能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例. 具体实现角度来说:one:单例模式的类只提供私有的构造函数,two:类定义中含有一个该类的静态私有对象,thr:该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象 单例模式:应用场合: 有些类的对象只需要一

抽象类 抽象方法 接口 类部类 匿名类部类 设计模式之单例模式(懒汉模式及饿汉模式)

---恢复内容开始--- 抽象类  关键字  abstract 不能被实例化(创建对象),可通过类名调用静态方法 子类继承抽象类必须重写父类的所有抽象方法,然后用多态调用 接口:关键字 interface   类名 implements 接口名 1.接口中只能有抽象方法,并且不能被实例化,通过多态调用 2.接口与接口之间的关系: 继承关系(可以多继承); 类部类: 在类中定义的类 创建类部类对象    外部类名.内部类名  对象名 = new 外部类名().new内部类名() 匿名类部类: 在写

单例中懒汉和饿汉的本质区别

单例中懒汉和饿汉的本质区别在于以下几点: 1.饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变.懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的. 2.从实现方式来讲他们最大的区别就是懒汉式是延时加载,他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,饿汉式无需关注多线程问题.写法简单明了.能用则用.但是它是加载类时创建实例(上面有个朋友写错了).所以如果是一个工厂模式.缓存了很多实例.那么就得考虑效率问