码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2019-07-10 01:29:17      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:虚拟机   sync   访问   let   模式   oid   代码   col   而不是   

 饿汉式实现(单例对象立即加载)

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()方法都要同步,并发
效率较低。

 

单例模式

标签:虚拟机   sync   访问   let   模式   oid   代码   col   而不是   

原文地址:https://www.cnblogs.com/vieta/p/11161268.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!