第一:利用內部類加繼承關係
class A{ protected class B extends A{ // public B(){System.out.println("this is B constructor");} } public B b =new B(); public A(){ //System.out.println("this is A constructor"); } }public class TestInnerClass{ public static void main(String args[]){ new A(); } }
第二: 利用normal類加繼承
class A{ public TestDeadlock t = new TestDeadlock();}public class TestDeadlock extends A{ public static void main(String args[]){ new A(); }}
或者:
class A{ public A(){ TestDeadlock t = new TestDeadlock(); }}public class TestDeadlock extends A{ public static void main(String args[]){ new A(); }}
第三 可以不用建構函式 和 繼承也可以實現
class Blocked{ public Interrupt interrupt = new Interrupt();}public class Interrupt{ Blocked b = new Blocked();public static void main(String[] args) { new Blocked(); } }
總結: 其實就是利用繼承關係讓父子類發生死結。
在父類中執行個體化子類是產生死結的根本原因。
其實就是資源相互競爭,形成死迴圈