2 u010031751 u010031751 于 2016.05.10 14:49 提问

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接口的实现类中

3个回答

CSDNXIAOD
CSDNXIAOD   2016.05.10 14:53

单例的种种情况
单例
单例
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

mybooby
mybooby   2016.05.10 15:00

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

u010031751
u010031751 这个方式我也试过,但是还是建了两个实例。。TAT
一年多之前 回复
Royal_lr
Royal_lr   Ds   Rxr 2016.05.10 15:16

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

u010031751
u010031751 回复Royal_lr: 是啊
一年多之前 回复
Royal_lr
Royal_lr 回复超级无敌小明: 你确定是2个不同的实例?
一年多之前 回复
u010031751
u010031751 我是两个方法先后访问的,而且也试了public synchronized static,也还是不行
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!