`
bleet
  • 浏览: 58029 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

我和单例的爱恨情仇

阅读更多
你是不是曾经有过这样的经历,在写一个名叫getInstance()方法时,特别计较写在方法前面的那个可恶的synchronized,让你无法下手,至少犹豫10秒钟,哈哈。

不管你们有没有过,我每次写单例时,都为这个synchronized搞的痛苦不堪,于是我痛下决心,在以后我的代码里不会再出现延时加载这一概念,我要的只是初始化而已,即时加载又有何妨呢?

只是下个决心而已,缘何要加个痛字,各位看管,是不是有点过分了。

其实不然,且听我慢慢道来。

我第一次与单例相识,那是一个深秋的深夜,那天我第一次听说了《设计模式》,我用一颗年轻的心打开了XX网站的某某网页,输入单例模式并敲下回车键,那一瞬间我的第一感觉就是愚昧与无知,当我还不懂得什么事单例的时候,竟然有数以万计的IT头脑已将它拥入怀抱,而我却在一秒钟前还沾沾自喜,以为发现了个桃花源。

于是乎,我用虔诚和渴求的心灵仔细的阅读了其中一篇,当时我觉得我就是未来的架构师,设计模式这么时髦的东西,我竟然一遍就看懂了,真是不可思议。

再后来,我的代码里到处是单例,哎,现在想来真是乱套。

直到有一天,我认识了多线程,我了解了生产者和消费者的多线程举例,并且也爱上了synchronized这个让我伤痛的词汇,毕竟只有它才能让我有一种100%控制程序运行的感性认识。

于是这个样子,我就一只脚踩了2只船,同时爱上了单例和synchronized,虽说以前学习单例的时候看到过synchronized,但是因为它华而不实的外表(单词太长了,记不住,当时不觉得有用)而被我跳过,看来她属于耐看型。

因为爱上了synchronized,所以更了解synchronized,当我再次同时写下单例和synchronized时,心中不禁感慨万分,我做了一个假设,如果一个web程序同时有1W个线程访问我写的单例时,那将是多么庞大而华丽的一个阵容,它们将排队,一个一个走过我的synchronized,想到这里我不禁为排在最后的这些线程捏了一把冷汗,这要排多久!如此一来我深爱的synchronized是多么的严厉和霸道啊。

于是我的同情心和爱心同时跑出来,到底该不该舍弃synchronized的呢?真是应验一句话:因为爱所以痛。杯具。

待续......
分享到:
评论
1 楼 Reset 2011-12-15  
public class Singleton(){
     private volatile static Singleton singleton;

     private Sington(){};
     public static Singleton getInstance(){
     if(singleton == null){
         //synchronized (Singleton.class);
              if(singleton == null){
                 singleton = new Singleton();
                                   }
                          }
          //}
              return singleton;
        }
}

相关推荐

Global site tag (gtag.js) - Google Analytics