重入同步进入无限循环

时间:2015-09-08 08:38:03

标签: java synchronization reentrancy

当存在可重入同步时,它将进入无限循环并以StackOverflow异常结束。

以下代码打印"外部"首先,然后继续打印"内部"。

有人可以告诉我为什么会出现这种情况?

public void outer()
   {
      synchronized ( this)
      {
         System.out.println("Outer");
         inner();
      }
   }

   public void inner()
   {
      synchronized ( this)
      {
         System.out.println("Inner");
         inner();
      }
   }

1 个答案:

答案 0 :(得分:2)

您的错误与synchronize关键字无关。你继续递归调用一个方法而不返回。尝试获取同一对象上的锁时,线程不会阻塞自身。你得到 StackOverflowError ,因为你已经用完了最大数量的堆栈帧来调用inner()。即使没有同步

,也会重现此行为