程序有问题:
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 static MySingleton instance()
    因为对象在抽象上是并行的,因此主要考虑是new运算可能有两个对象同时调用,
    这里是有两个同时调用public static MySingleton instance()中的new,则可能
    存在一个申请了堆空间而另一个又再申请,则会出现多余的申请。你可以试试对程序
    作个标号,再排排序来看,可能会比较好理解。
      

  2.   

    to fanlord(Leo)
    谢谢你指出我的两个错
    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();
    }
    }