zoukankan      html  css  js  c++  java
  • java集群优化——多线程下的单例模式

            在最初学习设计模式时,我为绝佳的设计思想激动不已,在以后的project中。多次融合设计模式,而在当下的设计中。我们已经觉察出了当初设计模式的高瞻远瞩。可是也有一些不足,须要我们去改进。有人说过。世界上没有绝对的事,当然,再简单的事情,环境变了,也会发生变化,今天和大家一起分享在多线程下单例模式的优化。

    1,传统

    首先,我们回想下传统的单例(懒汉式)是怎样工作的:

    public class SingletonClass{
        private static SingletonClass instance=null;
        public static SingletonClass getInstance()
        {
            if(instance==null)
            {
                   instance=new SingletonClass();
            }
            return instance;
        }
        private SingletonClass(){
        }
    }


    我们不难看出,在多线程执行时,普通的代码会带了困恼,大家看多线程代码执行时的图片:



    2,双重锁

    我们看到线程1和线程2都运行了代码,我们得到的并非一个单例的对象,而是多个对象。针对这些我们进行了同步的优化。


    public static class Singleton{
        private static Singleton instance=null;
        private Singleton(){
            //do something
        }
        public static Singleton getInstance(){
            if(instance==null){
                synchronized(Singleton.class){
                    if(null==instance){
                        instance=new Singleton();
                    }
                }
            }
            return instance;
        }
    }

    我们在看看这样的代码的多线程执行图:


    大家看,只执行了一次。不不过它被同步机制保护了,并且是进行了双重判定。这样保证多线程下单例模式的正常执行。

    3,枚举

    在jdk1.5之后。java注意到这一细节,在创建单例应用时,我们能够利用枚举类型完毕我们的工作,而且他是线程安全的。

    源代码:

    public enum SingletonEnum
    {
        INSTANCE;
        private String name;
        publicString getName()
        {
           returnname;
        }
         publicvoid setName(String name)
        {
           this.name = name;
        }
     }
    
    

        这样的优化,使我们更优雅地适用代码。可是也带来了一定的问题,就是我们对对象的类型有了模糊的概念,所以在工作中,还是建议保留双锁模式,对一些工具类则能够採取枚举类型优化,简化我们的代码与逻辑。


    总结:

            细节的优化。就像雕琢一件艺术品,我们接触的高人越多。这种思想就越浓厚,所以,我们经常推断一个人事怎么的品格与素养,通过他接触的人。朋友就能够猜測出来,而计算机内。也是如此,我们接触的优秀框架多了。自己自然就是优秀的设计师。







  • 相关阅读:
    ubuntu 11.04 Gnome 恢复默认的任务栏面板
    (转载)学习腾讯的产品管理之道
    (转载)项目管理之外谈项目管理
    windows 下键盘映射
    该留意的文章
    一些常用的工具
    ubuntu 11.04 old sources.list
    一个css3流程导图
    echarts雷达图
    highcharts图表
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6875638.html
Copyright © 2011-2022 走看看