单例模式
饿汉式和懒汉式
1、饿汉式
①构造器私有化(防止在类的外部可以直接创建(new))
②在类的内部直接创建对象
③提供一个公共的静态方法,返回对象
public class SingleTonTest {
public static void main(String[] args) {GrilFriend instance = GrilFriend.getInstance();
GrilFriend instance1 = GrilFriend.getInstance();
System.out.println(instance1 == instance);
}}
class GrilFriend {
private static age = 18
private String name;
private static GrilFriend gf = new GrilFriend("aa");
private GrilFriend(String name) {
System.out.println("构造器被执行......");
this.name = name;
}public static GrilFriend getInstance() {
return gf;
}
}
2、懒汉式 单例模式
①构造器私有化(防止在类的外部可以直接创建(new))
②定义一个静态的对象属性
③提供一个公共的静态方法 返回对象(如果没有创建对象,则创建一个,创建过了则返回对象)
④懒汉式,只有当用户使用getInstance方法时,才会返回对象,然后再次调用时返回上次创建的对象从而保证了单例
class GrilFriend {
private static age = 18
private String name;
private static GrilFriend gf;
private GrilFriend(String name) {
System.out.println("构造器被执行......");
this.name = name;
}public static GrilFriend getInstance() {
if (gf == null) {
gf = new GrilFriend("aa");
}
return gf;
}
}
【java设计模式】饿汉式VS 懒汉式
- 二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才创建。
- 饿汉式不存在线程安全问题,懒汉式存在线程安全问题(多个线程同时调用时,对象没创建完就会导致创建多个对象)
- 饿汉式存在浪费资源的可能,懒汉式则没有
- 在JavaSE标准类中,java.lang.Runtime就是经典的饿汉式单例模式
推荐阅读
- IDEA小技巧(Markdown里的命令行可以直接运行了)
- IDEA小技巧(Debug拖动跳转任意行)
- IDEA小技巧(Debug条件断点)
- Java并发——一文吃透线程池
- Java并发——CountDownLatch和CycliBarrier异同点详解
- Java并发——通过ReentrantReadWriteLock理解AQS的独占模式和共享模式
- Java并发—通过ReentrantLock和Semaphore揭秘AQS独占模式和共享模式
- 一文吃透JVM,面试轻松拿offer
- 网传的Spring大漏洞