单例模式照成的java.lang.StackOverflowError

本文探讨了在Java中使用单例模式时可能出现的循环依赖问题,并通过具体代码示例展示了这种错误配置如何导致StackOverflowError。为了避免此类问题,文章建议不要将一个单例对象作为另一个单例对象的成员变量。
摘要由CSDN通过智能技术生成

public interface UnitMgr {

}

 

 

import mgr.UnitMgr;

public class A implements UnitMgr{

 private static UnitMgr instance = new A();

 private B b = (B) B.getInstance();

 

 public static UnitMgr getInstance(){

  if(instance == null){

   instance = new A();

  }

  return instance;

 }

}

 

 

import mgr.UnitMgr;

public class B implements UnitMgr{

 private static UnitMgr instance = new B();

 

 private A a = (A) A.getInstance();

 

 public static UnitMgr getInstance(){

  if(instance == null){

   instance = new A();

  }

  return instance;

 }

}

 

 

public class Test{

       public static void main(String[] args) {

                A.getInstance();

                B.getInstance();

}

 

       像上面Test主类调用测试那样,就会出现java.lang.StackOverflowError错误,原因就是循环迭代调用,即,A调用B, B调用A,所以在使用单例的时候,最安全的方法就是别将一个单例定义成另一个单例的属性,而是直接getInstance()调用。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值