java基础的零散总结(2)--单例设计模式

单例设计模式:

实例:张三开车去东北,经理只想让他中途开这同一辆车去。

在代码中车只有一辆,不管你怎么new,只有这一辆车。

 

懒汉式:(项目中建议使用)

class Car{
 private Car(){}//构造函数私有话
 
 private Car car=new Car();//必须提供一个对象

 public static Car getCar(){//提供一个可以返回对象的方法,必须是静态的,这个对象是不能new的
  return car;
 }
}

 

饿汉式:(在面试中常提到,涉及到多线程中的问题) 写一个延迟加载的单例设计模式

①直接使用同步函数解决多线程问题,效率稍低。

class Single
{
 private Single(){}//构造函数私有话
 
 private Single single=null;

 public static synchronized Single getSingle(){

  if(single==null)
   single=new Single();
  return single;
 }
}

②使用双重判断加同步代码块解决,效率稍高。

class Single
{
 private Single(){}//构造函数私有话
 
 private Single single=null;

 public static Single getSingle(){

  if(single==null){
   synchronized(Single.class){//加同步代码块时所使用的是哪一个锁?该类所属字节码的文件对象。
    if(single==null)
     single=new Single();
   }
  }
  return single;
 }
}

 

懒汉式和饿汉式的区别:懒汉式的特点在于,实例的延迟加载。

延迟加载时会出现安全问题,可以使用同步解决。同步函数和同步代码块都可以,同步函数效率稍低。使用同步代码块的双重判断可以解决效率问题。

加同步代码块时所使用的是哪一个锁?该类所属字节码的文件对象。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值