单例模式
Posted vieta
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。
饿汉式实现(单例对象立即加载)
public class SingletonDemo02 private static /*final*/ SingletonDemo02 s = new SingletonDemo02(); private SingletonDemo02() // 私有化构造器 public static /*synchronized*/ SingletonDemo02 getInstance() return s; public class Client public static void main(String[] args) SingletonDemo02 s = SingletonDemo02.getInstance(); SingletonDemo02 s2 = SingletonDemo02.getInstance(); System.out.println(s==s2); //结果为true
• 饿汉式单例模式代码中,static变量会在类装载时初始化,此时也不会涉及多个线程对象访问该对象的问
题。虚拟机保证只会装载一次该类,肯定不会发生并发访问的问题。因此,可以省略synchronized关键字。
• 问题:如果只是加载本类,而不是要调用getInstance(),甚至永远没有调用,则会造成资源浪费!
懒汉式实现(单例对象延迟加载)
public class SingletonDemo01 private static SingletonDemo01 s; private SingletonDemo01() // 私有化构造器 public static synchronized SingletonDemo01 getInstance() if(s==null) s = new SingletonDemo01(); return s;
要点:
– lazy load! 延迟加载, 懒加载! 真正用的时候才加载!
• 问题:
– 资源利用率高了。但是,每次调用getInstance()方法都要同步,并发
效率较低。
以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章