java单例模式(饿汉式/懒汉式)

前言:

懒汉式和饿汉式都是单例模式的实现方式。 懒汉式是指在需要使用实例时才会创建,而不是在类加载时就创建。懒汉式的实现方式有多种,其中最常见的是双重检查锁定(Double-Checked Locking)和静态内部类(Static Inner Class)。 双重检查锁定的实现方式是在getInstance方法中进行两次判空,第一次判空是为了避免不必要的同步,第二次判空是为了确保只有一个实例被创建。这种方式可以保证线程安全,同时也能够延迟实例的创建,但是在某些情况下会出现问题,例如在多线程环境下可能会出现指令重排的问题。 静态内部类的实现方式是利用了类加载器的机制,保证了线程安全和延迟实例的创建。在这种方式中,只有在getInstance方法第一次被调用时,才会加载SingletonHolder类,从而创建实例。由于类加载器的机制,SingletonHolder类只会被加载一次,因此保证了线程安全。 饿汉式是指在类加载时就创建实例,因此在多线程环境下也能够保证线程安全。饿汉式的实现方式比较简单,只需要在类中定义一个静态实例,并在静态代码块中进行初始化即可。这种方式的缺点是无法延迟实例的创建,因此可能会浪费一些资源。

总结:

 

懒汉式代码:

package mystudy.danlimoshi;

public class lanhanshi {
    public static void main(String[] args) {
        //System.out.println();
        cat.getInstance();
        System.out.println(cat.getInstance());
    }
}
class cat
{
    private String name;
    private static cat mycat;
    //1.定义一个静态属性对象
    //提供一个公共的public的static方法
    private cat(String name) {
        this.name = name;
    }
    public static cat getInstance()
    {
        if(mycat==null)
        {
            mycat=new cat("小猫");
        }
        return mycat;
    }

    @Override
    public String toString() {
        return "cat{" +
                "name='" + name + '\'' +
                '}';
    }
}

饿汉式:

package mystudy.danlimoshi;

public class danli {
    public static void main(String[] args) {
        gril instance=gril.getGr();
        System.out.println(instance);
    }
}
class gril
{
    private String name;
    private static gril  gr=new gril("小红");
    private gril(String name) {
        this.name = name;
    }
    public static gril getGr() {
        return gr;
    }

    @Override
    public String toString() {
        return "gril{" +
                "name='" + name + '\'' +
                '}';
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值