程序有问题:
1.public MySingleton中间少了class关键字
2.finl static private MySingleton instance_ = null;
应为final,而且,final关键字使得无法对instance_再赋值,故instance_ = new MySingleton();显然错误,去掉final/
3.好像没有提供static的函数或者public的构造函数,无法实例化的你在上面说的
将 instance_ = new MySingleton();
一句改为
MySingleton Tmp_instance = new MySingleton();
instance_ = Tmp_instance;
没有改变,因为java默认是用引用的,所以上面的代码改后和没该是没有区别的。
1.public MySingleton中间少了class关键字
2.finl static private MySingleton instance_ = null;
应为final,而且,final关键字使得无法对instance_再赋值,故instance_ = new MySingleton();显然错误,去掉final/
3.好像没有提供static的函数或者public的构造函数,无法实例化的你在上面说的
将 instance_ = new MySingleton();
一句改为
MySingleton Tmp_instance = new MySingleton();
instance_ = Tmp_instance;
没有改变,因为java默认是用引用的,所以上面的代码改后和没该是没有区别的。
因为对象在抽象上是并行的,因此主要考虑是new运算可能有两个对象同时调用,
这里是有两个同时调用public static MySingleton instance()中的new,则可能
存在一个申请了堆空间而另一个又再申请,则会出现多余的申请。你可以试试对程序
作个标号,再排排序来看,可能会比较好理解。
谢谢你指出我的两个错
1.public MySingleton中间少了class关键字
2.finl static private MySingleton instance_ = null;
第三个问题我不明白
3.没有改变,因为java默认是用引用的,所以上面的代码改后和没该是没有区别的。
在c++中引用不可重新赋值的,在java中也一样吗to shuneng
我加了synchronized呀
我改正后如下
public class MySingleton
{
static private MySingleton instance_ = null;
private MySingleton()
{
}
static public MySingleton instance()
{
if( instance_ != null )
return instance_;
// 进入同步( 刚学同步关键词忘了 )
synchronized( anyobject )
{
if( instance_ != null )
return instance_;
instance_ = new MySingleton();
return instance_;
}
} public void print()
{
System.out.println("Hello World!");
}
public static void main(String[] args)
{
MySingleton.instance().print();
}
}