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

前言:

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

总结:

java单例模式(饿汉式/懒汉式)_第1张图片

 

懒汉式代码:

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 + '\'' +
                '}';
    }
}

你可能感兴趣的:(java,单例模式,开发语言)