public class Class1
{
private static Class1 oInstance = null;
private Class1()
{
}
public static Class1 GetInstance()
{
if(oInstance == null)
{
oInstance = new Class1();
}
return oInstance;
}
}
问这段程序有什么问题,我答的是GetInstance被声明成static了,其他类都可以调用它而且不用实例化Class1。
但是oInstance和Class1()都是private的,那其他类调用GetInstance时就不能使用或访问oInstance和Class1()。造成运行时错误。
这样答对吗?
------解决思路----------------------
Singleton……
你去查下设计模式中的单例模式,要的就是这效果
而且这个缺少了lock二次检查
外部是通过GetInstance()方法来获取Class1的实例,在程序中,Class1只会被实例化一次
------解决思路----------------------
少了同步
最好用赖汉机制 写单例
------解决思路----------------------
貌似你答的不对
单例模式。
虽然一般我写单例都这样写,
但是知道规范的是方法中应该添加synchronized锁,另外方法首字母规范是小写。
------解决思路----------------------
做两点改变:
1.使用volatile声明oInstance ,保障数据是最新的。
2.使用double check 保障线程安全。
3.GetInstance这个方法命名不规范,严格说Class1命名也不规范。
------解决思路----------------------
if(oInstance == null){
synchronized(class1.Class){
if(oInstance== null)
oInstance = new Class1();
}
}
return oInstance;
------解决思路----------------------
这个代码的确是有问题啊,我不是说了吗,少了锁的检查,在并发的情况下可能会导致new多次,违背了只能实例化一次的需求,是GOF23种模式中的Singleton(单例),大学不讲这些东西的,应该,至少我学过的计算机科学与技术不讲这些(他妈的连C#,java都没教过,只教过C)