设计模式笔记5(单例模式)

本文介绍了单例模式的设计理念,探讨了如何确保一个类只有一个实例,并提供了全局访问点。通过具体的代码示例,解释了基本的单例实现方式及其在多线程环境下的问题与解决方案。

     有的时候一些资源是只能有一个的,这时候,代表这个资源的对象就只能有一个,例如线程池。缓存等资源。

有人会说直接用全局变量来实现不就是,这种情况是可以的,但是这样是有缺点的,全局变量在程序一开始的时候就创建好对象,但是,有些资源是十分消耗资源的,这样的话浪费大量资源。

经典的模式代码如下:

public class Name

{

   private staitc Name name;

    private Name(){}

    public static Name getInstance(){

     if (name==null)

       name=new Name();

return name;

   }

}

需要注意的有几点:1.拥有一个全局静态变量

2.构造函数私有化

这段代码看似没有问题,但是如果在多线程中,这段代码是有出错的可能的,如果两个线程同时执行了判断,这时候就都为true,这样的话就会产生两个对象。

当然可以把getInstance()方法同步处理,但是这样无疑会降低程序的效率

可以如下处理:

public static Name getInstance(){

     if (name==null)

       {

         sychronized(Name,class)

     {

      if(name==null)

         name=new Name();

      }

        }

return name;

   }

转载于:https://www.cnblogs.com/macula7/archive/2009/03/06/1960687.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值