饿汉单例与懒汉单例

版权声明:禁止侵权,打击盗版! https://blog.csdn.net/ChenGX1996/article/details/82080365
 

//饿汉单例(线程安全)

public class Mon {

private static final Mon INSTANCE = new Mon();

//构造方法私有化

private Mon() {}

public static Mon getInstance() {

return INSTANCE;

}

//创建一个普通方法

public void print() {

System.out.println("这是一个饿汉单例");

}

public static void main(String[] args) {

Mon singleon = null;//声明对象

singleon = Mon.getInstance();

singleon.print();

}

}

//懒汉单例(线程不安全)

public class Mon {

private static Mon instance;

//构造方法私有化

private Mon() {}

public static Mon getInstance() {

if(instance == null) {

//此时还没有实例化

instance = new Mon();

}

return instance;

}

public void print() {

System.out.println("这是一个懒汉单例");

}

public static void main(String[] args) {

Mon lemon = null;//声明对象

lemon = Mon.getInstance();

lemon.print();

}

}

//懒汉单例(线程安全)

//1.在对getInstance() 进行上锁synchronized,但是效率太低

//2.双重检查(静态内部类方法),线程安全、延迟加载、效率较高

public class Mon {

private Mon() {

}

private static class Sing {//内部类

private static final Mon INSTANCE = new Mon();

}

public static Mon getInstance() {

return Sing.INSTANCE;

}

public static void main(String[] args) {

Mon mon = null;//声明对象

mon = Mon.getInstance();

}

}

猜你喜欢

转载自blog.csdn.net/ChenGX1996/article/details/82080365
今日推荐