本博原创禁止转载、拷贝、拍照等一切商业目地,否则将保留法律权利!
---------linux-深圳-luo
缺陷:
1》单例模式只能修改代码来扩展,测试也难以捕获,与单一职责原则冲突
2》单例线程不安全
public class Singleton{
private static Singleton singleton=null;
//限制产生多个对象
private Singleton(){
}
public static Singleton getSigleton(){
if(singleton == null){
singleton =new Singleton();
}
return singleton;
}
}
本博原创禁止转载、拷贝、拍照等一切商业目地,否则将保留法律权利!
---------linux-深圳-luo
高并发时可能在内存中出现多个实例
比如:同一时刻,线程1执行到 singleton =new Singleton(); 但没有获得对象(对象初始化需要时间)
第二个线程2也在执行,执行到了singleton==null 判断,线程2条件为真,于是继续运行,线程1获得对象,线程2也获得对象,因此产生了2个对象
解决线程安全办法很多,我们可以在getSigleton方法前加synchronized也可以在getSingleton方法类添加synchronized来实现,单这些处理办法不是最优秀的办法
我们考虑到一个通用的写法:
public class Singleton{
private static final Singleton singleton=new Singleton();
private Singleton(){}
public static Singleton getSingleton(){
return singleton;
}}
有单例模式,那么有没有上限的多例模式了?
恩,完全是有的,现在我们来改写Singleton
import java.util.Random;
import java.util.Vector;
public class moreOfSingleton {
private static int maxNumberOfSingleton=2;//多单例数量
private static Vector<String> nameList=new Vector<String>(); //多单例名称
//多单例实例,注意线程安全
private static Vector<moreOfSingleton> moreOfSingletonList=new Vector<moreOfSingleton>();
private static int count=0;//多单例序号,显示区别
//初始化
static{
for(int i=0;i<maxNumberOfSingleton;i++){
moreOfSingletonList.add(new moreOfSingleton("多单例"+(i+1)));
}
}
private moreOfSingleton(){};
private moreOfSingleton(String name){
nameList.add(name);
}
//随机获得一个多单例对象
public static moreOfSingleton getInstance(){
Random random=new Random();
count=random.nextInt(maxNumberOfSingleton);
return moreOfSingletonList.get(count);
}
//打印随机多单例
public static void toPrint(){
System.out.println(nameList.get(count));
}
//测试多单例访问
public static void main(String [] args){
for(int i=0;i<5;i++){
System.out.print((i+1)+":");
moreOfSingleton.getInstance().toPrint();
}
}
}
本博原创禁止转载、拷贝、拍照等一切商业目地,否则将保留法律权利!
---------linux-深圳-luo
分享到:
相关推荐
【高星级酒店管理中服务补救的应用】 高星级酒店的管理中,服务补救是一个至关重要的环节,它涉及到如何在服务失误发生后迅速响应,以恢复客户满意度和忠诚度。服务补救是指当服务提供出现问题时,酒店采取的及时...
为了解决这个问题,我们可以采用三种设计模式:简单工厂、工厂方法和模板方法。 1. **简单工厂**: 简单工厂模式通过一个静态方法返回一个具体类型的实例。这种方法的优点是简洁,可以直接使用泛型方法。但是,它...
飞线等方法虽然可以解决问题,但这些临时性的补救措施可能会影响电路板的可靠性和美观性。因此,对于需要长期使用的电路板,最根本的解决方法还是尽可能地重新制造或更换有问题的电路板部分。在实际操作过程中,对于...
在DMAIC方法的五个阶段(定义,测量,分析,改进和控制)中,这种方法可以最大限度地减少分析缺陷。 在不同阶段,使用了不同类型的六个sigma工具。 进行帕累托分析以识别最主要的缺陷,并找出这些缺陷的根本原因。 ...
标题中的“注塑件缺点及补救方法”指的是在注塑工艺中常见的产品缺陷及其解决方案。注塑是一种将熔融塑料注入模具内冷却成型的制造技术,广泛应用于各种塑料制品的生产。在实际操作中,可能会遇到诸如产品表面缺陷、...
尤其对于从事Linux程序开发的专业人士而言,掌握设计模式的应用对于构建高效稳定的系统至关重要。 #### Linux程序设计模式的起源与发展 Linux程序设计模式的形成深受Unix哲学的影响。这一哲学强调简单、实用和灵活...
我们发现主要的新兴SSO协议,即SAML SSO和OpenID受到认证缺陷的困扰,允许恶意服务提供商劫持客户端认证尝试,或强制后者在未经其同意或意图访问资源的情况下访问资源。 这可能会产生严重后果,正如我们在基于SAML...
本篇文章将深入探讨工业物联网在安全环保和预测性运维这两个典型应用场景中的应用,以及它如何在推动工业数字化变革中发挥关键作用。 安全、节能和环保是工业物联网应用的重点领域。在全球范围内,企业面临的监管...
- **公司定位**:Veracode是一家专注于应用程序安全领域的公司,致力于为客户提供全面的应用程序安全测试及补救服务。 - **核心价值**:通过提供高度可扩展且成本效益高的软件安全规划方案,帮助企业提升应用程序的...
解决办法:手机设计,无法修正。 3.灰阶屏幕的显示精度比较差; 解决办法:NOKIA手机的通病,其分辨率实在太低,字体不清晰,无法通过软件升级修正。 评价: 虽然NOKIA 2100存在的问题不多,但功能也实在太少...
《现代经营新思维零缺陷质量培训教材》是一份详尽阐述零缺陷管理理念和实践方法的教程,旨在帮助企业管理者和员工理解并掌握如何在工作中实现零缺陷目标,提升产品和服务质量。该教材分为多个部分,涵盖了从零缺陷...
本文将详细介绍ISP的概念,以及AVR芯片的熔丝位和熔丝补救方法。 ISP全攻略: ISP技术允许用户在AVR芯片被放置在其最终产品中时通过串行接口对程序存储器进行编程。ISP模式通过使用微控制器上的SPI (Serial ...
为了得到更安全的设计,工程师需要考虑到这些因素,并可能需要调整结构设计,减少或消除初始缺陷,或者采取其他补救措施以改善结构的后屈曲特性。 总结,ANSYS在解决带初始缺陷的框架稳定问题上提供了一套完整的...
它的核心理念是通过设计和实施预防措施,提前消除可能导致错误的因素,从而达到减少产品缺陷、提升生产效率和质量的目标。这种技术强调在错误发生前进行干预,而不是依赖于后期的检查和纠正。 错误和缺陷之间的关系...
它是一种系统化的工程设计辅助工具,利用表格来协助工程师进行工程分析,识别潜在的设计缺陷和它们可能产生的影响。通过在设计阶段早期发现问题并采取应对措施,可以显著提高产品的可靠性和品质。 FMEA分为设计FMEA...
FMEA(Failure Mode and Effects Analysis,失效模式与效应分析)是一种系统性的风险评估方法,广泛应用于产品设计和制造过程中,旨在预防潜在问题的发生,提升产品的质量和可靠性。FMEA的核心理念是通过提前识别和...
根据提供的文件信息,我们可以提炼出以下知识点: 1. 移动安全大数据与移动威胁场景下的画像线索...此外,文档强调了互联网画像是商务驱动的,而安全画像则是发现查询驱动的,两者在应用场景和技术方法上有明显区别。
【螺杆制冷机组常见故障及补救方法】 螺杆制冷机组是工业制冷系统中的关键设备,主要用于各种环境下的冷却和冷冻需求。然而,在实际运行中,可能会遇到多种故障,了解这些故障的原因及其解决方法至关重要。 1. **...
零缺陷管理法,作为企业质量管理方法的一次重大革新,旨在通过系统性的管理和操作流程优化,实现产品和服务质量的显著提升,从而达到几乎无缺陷的生产目标。这种方法由质量管理先驱菲利普·克劳斯比提出,他主张...
通过对认知属性的分析,不仅识别了学生在计算能力上的问题,还设计并实施了补救教学方案,证明了这种基于认知诊断的教学方法可以显著提高学生的数学技能。这样的研究对于改进数学教育,特别是帮助有计算困难的学生...