java集群优化——多线程下的单例模式

白色玫瑰 程序猿

时间: 2023-07-11 阅读: 1 字数:2870

{}
细节的优化,就像雕琢一件艺术品,我们接触的高人越多,这样的思想就越浓厚,所以,我们常常判断一个人事怎么的品格与素质,通过他接触的人,朋友就可以推测出来,而计算机内,也是如此,我们接触的优秀框架多了,...
  在最初学习设计模式时,我为绝佳的设计思想激动不已,在以后的工程中,多次融合设计模式,而在当下的设计中,我们已经觉察出了当初设计模式的高瞻远瞩,但是也有一些不足,需要我们去改进,有人说过,世界上没有绝对的事,当然,再简单的事情,环境变了,也会发生变化,今天和大家一起分享在多线程下单例模式的优化。

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;
   }
 }

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

总结:

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

原文地址:https://blog.csdn.net/xvshu/article/details/47106875?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168904449916800185828444%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168904449916800185828444&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-24-47106875-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/bc8d86bfabd049a0b71fbe51b6d4a534

最新评论

当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号

×

(穷逼博主)在线接单

QQ: 1164453243

邮箱: abcdsjx@126.com

前端项目代做
前后端分离
Python 爬虫脚本
Java 后台开发
各种脚本编写
服务器搭建
个人博客搭建
Web 应用开发
Chrome 插件编写
Bug 修复