getInstance有不是单例的情况吗

问题描述

getInstance有不是单例的情况吗
private static DeviceServerHolder instance = null;

public static DeviceServerHolder getInstance() {
if (instance == null) {
instance = new DeviceServerHolder();
}
return instance;
}
我在两个方法里调用getInstance()方法。方法A检测到instance是空,建了一个新的实例a。方法B检测到instance是空,又建了一个新的实例b。此后A再调用getInstance()方法时全用实例a,B再调用getInstance()方法时全用实例b。
不明白这是为什么,跪求各位指点指点。。

其中A方法是在rmi接口的实现类中

解决方案

单例的种种情况
单例
单例

解决方案二:
单例实现要考虑多线程
public static DeviceServerHolder getInstance() {
synchronized(this) {
if (instance == null) {
instance = new DeviceServerHolder();
}
return instance;
}
}

解决方案三:
多线程的情况,当A,B,,2个线程同时访问getInstance的时候,instance就都为空,,就会创建2个实例而不是单例了,,改成public synchronized static......

时间: 2024-08-04 09:37:41

getInstance有不是单例的情况吗的相关文章

(单例设计模式中)懒汉式与饿汉式在多线程中的不同

/*  目的:分析一下单例设计模式中,懒汉式与饿汉式在多线程中的不同!  开发时我们一般选择饿汉式,因为它简单明了,多线程中不会出现安全问题!  而饿汉式需要我们自己处理程序中存在的安全隐患,但是饿汉式的程序技术含量更高! */ /* class SinglePerson implements Runnable{    private static SinglePerson ss = new SinglePerson("hjz", 22);//恶汉式    private int ag

Spring中单例bean访问非单例bean的第一种方式:方法注入

方法注入在Spring中是很少用的,主要应用是, 对象中可能定义了一个受保 护的抽象方法,而容器可能在运行时实现他以返回由容器查询得到的对象. 方法注入的最好用途之一就是处理单态.无状态对象需要调用非单态.有状 态或者非线程安全对象的情况. 以前刚接触Spring时,如果在单例bean中调用非单例bean,只要把那个非单 例bean 的singleton设置为false就可以了.其实不然,大家想,我们创建了一 个单例对象,在此单例对象中所用到的其它bean也只会创建一次--(大多数情 况是这样的

单例设计模式

package test; /* 单例设计模式特点 1.类不能实例化 构造方法私有化 2.类中先实例化一个对象 3.提供一个返回类对象的方法 getInstance */ public class Singleton {      public static void main(String[] args) {           // TODO Auto-generated method stub\           Single si=Single.getInstance();      

PHP单例:只在整个页面周期内唯一

由于asp.net是编译型的,所以单例一直会存在于这个应用程序的生命周期里,真正可以做到这个实例在应用程序生命周期中的唯一性. 单例模式的存在在一些情况下是比较有意义的,如BlogEngine的站点配置就是采用的单例模式,而且它的载入和保存的代码是相当经典的,有兴趣可以看看它的源代码. 由于asp.net是编译型的,所以单例一直会存在于这个应用程序的生命周期里,真正可以做到这个实例在应用程序生命周期中的唯一性. php的单例模式的实现大致如下: class Stat{       static

设计模式C#描述——单例与多例模式

设计 设计模式C#描述--单例与多例模式 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有以下特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类必须给所有其他对象提供这一实例. 一个典型的单例类的实现如下所示:其中构造子私有表示子类不能被继承. public class Singleton { private static Singleton m_instance = null; private

设计模式C#描述-单例与多例模式

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有以下特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类必须给所有其他对象提供这一实例. 一个典型的单例类的实现如下所示:其中构造子私有表示子类不能被继承. public class Singleton{private static Singleton m_instance = null; private Singleton(){}public sta

关于Java单例对象同步问题

单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.正是由于这个特点,单例对象通常作为程序中的存放配置信息的载体,因为它能保证其他对象读到一致的信息.例如在某个服务器程序中,该服务器的配置信息可能存放在数据库或文件中,这些配置数据由某个单例对象统一读取,服务进程中的其他对象如果要获取这些配置信息,只需访问该单例对象即可.这种方式极大地简化了在复杂环境下,尤其是多线程环境下的配置管理,但是随着应用场景的不同,也可能带来一些同步

php设计模式之单例、多例设计模式的应用分析

本篇文章是对php设计模式中的单例与多例设计模式的应用进行了详细的分析介绍,需要的朋友参考下   单例(Singleton)模式和不常见的多例(Multiton)模式控制着应用程序中类的数量.如模式名称,单例只能实例化一次,只有一个对象,多例模式可以多次实例化. 基于Singleton的特性,我们经常用Singleton配置应用程序并定义应用程序中可能随时访问的变量.但有时并不推荐使用Singleton,因为它生成了一个全局状态且 该单一根对象没有封装任何系统功能.多数情况下,会使单元测试和调试

序列化与单例

当单例模式的类实现了系列化Serializable接口,也可以通过反序列化来使它不再单例.  我们的单例类:  ? 1 2 3 4 5 6 7 8 9 10 11 12 public final class Singleton implements Serializable{       private static final long serialVersionUID = 1735776740157142434L;           private static final Singlet