Java 由单例代码中的循环创建的堆栈溢出

Java 由单例代码中的循环创建的堆栈溢出,java,stack-overflow,cycle,circular-dependency,Java,Stack Overflow,Cycle,Circular Dependency,我有两个单例类,让我们称它们为classA和classB 这些课程看起来像这样 class A { private static A instance; private A(int timeout) { init(); } public static A getInstance(int timeout) { if(instance == null) { instance = new A(timeout);

我有两个单例类,让我们称它们为class
A
和class
B

这些课程看起来像这样

class A
{
  private static A instance;

   private A(int timeout)
   {
     init();
   }

    public static A getInstance(int timeout)
    {
      if(instance == null)
      {
        instance = new A(timeout);
      }
      return instance;
    } 

    private void init()
    {
      new Monitor().sendMonitorStatus();
    }
}
对于
B类

class B
{
private static B instance;

   private B(A a)
   {

   }

    public static B getInstance(A a)
    {
        if(instance == null)
        {
            instance = new B(a);
        }
        return instance;
    }
}
然后还有一个名为
Monitor
的类,看起来也是这样

class Monitor
{
  public void sendMonitorStatus()
  {
    B.getinstance(A.getinstance(10));
  }
}

正如你所看到的,问题是我得到了一个
stackoverflow
,因为它保持了一个循环,调用
B
,然后调用
a
,哪个调用
B
,哪个调用
a
。。。,没有重新设计就可以解决此问题,或者重新设计类的工作方式是解决此循环导致此错误的唯一方法?

要创建
a
的实例,您需要调用
Monitor::sendMonitorStatus
。要调用
Monitor::sendMonitorStatus
,您需要
A
的实例。你有一个依赖循环


你需要重新设计这个。具体方式–这取决于你想要实现什么。

是的,我担心没有办法。
A
填充在另一个类中创建的对象列表,并且
B
以消息协议将这些对象的消息发送到另一个类。我可能需要添加另一个类,然后它听起来像是要摆脱这种相互依赖。