JUC 单例模式样例(极限性能优化)

news/2024/9/23 7:48:46/

什么是单例模式

单例模式是一种创建型设计模式,其目的是确保一个类只有一个实例,并提供全局访问点。单例模式通常用于管理全局状态、资源共享或限制资源访问的情况下。


样例代码

这串代码出自《并发编程的艺术》

样例中使用了双重检查锁来实现了单例模式,这串代码相当巧妙,属于极限性能优化的经典样例。

java">public class Singleton { private volatile static Singleton singleton;private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); }  }  }  return singleton;  }  
}

代码解析

这串代码在创建对象时用了两次判空操作,也就是双重检查。

首先设置了一个全局变量singleton

java">private volatile static Singleton singleton;

加volatile的作用是及时知道是否创建对象,防止更多的线程再次进入阻塞队列,在第一次判空时起作用。

随后使构造方法私有

java">private Singleton (){}

目的是为了让外面不能new对象

随后给予创建对象的方法getSingleton(),这个方法和私有的构造方法保证了单例模式的实现。

在方法内先进行了一次判空,如果是空赶紧锁起来并创建一个对象,当不为空时就可以拦截其他所有的线程。

java">if (singleton == null)

随后写了一个同步块,使用 Singleton.class 作为锁对象,在多个线程同时进来的情况下,将第一个锁线程起来,只允许一个线程创建对象。 随后进行了第二次判空,同样是为了保证在多线程的情况下,拦截除第一线程外的所有队列线程

这样避免了多个线程同时通过第一次检查,然后进入同步块,从而提高了性能。

java">if (singleton == null) { singleton = new Singleton(); 
}  

在第二次判空后就可以创建对象了。

最后返回Singleton,即返回 Singleton 的唯一实例。

这串代码是经典的懒汉式单例模式实现,并在此基础上做了性能优化,使用了双重检查锁和 volatile 关键字。代码中在极大的情况下提高了性能,实现了单例模式


http://www.ppmy.cn/news/1431878.html

相关文章

开源协议的对比和商业上的安全使用

开源协议的对比和商业上的安全使用 开源组件是:“任何人都可以自由使用、更改和共享(以修改或未修改的形式)的软件”。当今企业依靠开源来加速开发、降低成本和推动创新。对开放源码的糟糕管理可能会使组织面临安全、法律和操作风险。 使用…

解决端口是0问题,解决mysql无法看到3306端口监听

mysql> show global variables like port; 是0 打开目录 /etc/mysql/mysql.conf.d 修改这段话为 [mysqld] # # * Basic Settings # user mysqlpid-file /var/run/mysqld/mysqld.pidsocket /var/run/mysqld/mysqld.sockport 3306datadir …

非洲秃鹫优化算法C++简化版/Matlab优化版

非洲秃鹫优化算法(Vulture Optimization, VO)是一种基于自然界中非洲秃鹫觅食行为的群体智能优化算法。这种算法由Seyedali Mirjalili教授在2016年提出,旨在模拟非洲秃鹫在寻找食物时的社会互动和觅食策略,以解决复杂的优化问题。…

Syncovery for Mac v10.14.3激活版:文件备份和同步工具

Syncovery for Mac是一款高效且灵活的文件备份与同步工具,专为Mac用户设计,旨在确保数据的安全性和完整性。该软件支持多种备份和同步方式,包括本地备份、网络备份以及云备份,用户可以根据实际需求选择最合适的方案。 Syncovery f…

四川古力未来科技抖音小店:科技新宠,购物新选择

在数字化浪潮席卷全球的今天,电商行业日新月异,新兴平台层出不穷。四川古力未来科技抖音小店,作为其中的佼佼者,凭借其独特的魅力和创新的服务模式,正逐渐成为消费者眼中的购物新宠。 一、四川古力未来科技抖音小店的独…

用户体验至上:独立站脱颖而出的关键要素解析

在数字化时代,独立站成为了许多品牌和企业展示自身形象、推广产品、建立客户联系的重要平台。然而,要想在众多的独立站中脱颖而出,吸引并留住用户,良好的用户体验至关重要。本文Nox聚星将和大家探讨如何做好独立站的用户体验&…

HTTP/1.1特性总结

优点 【简单,灵活和易于扩展,应用广泛和跨平台】 1.简单: http基本的报文格式就是headerbody,头部信息也是key-value简单的文本形式,易于理解,降低了学习和使用的门槛 2.灵活和易于扩展: &…

数据可视化高级技术Echarts(桑基图入门)

目录 一、什么是桑基图 二、基本特征 三、设计注意事项 四、使用Echarts进行初级绘制 1.首先不能忘记五个基本步骤 2.绘制的时需要将图像类型series.type设定为sankey类型。 一、什么是桑基图 桑基图(Sankey diagram),即桑基能量分流图&…