あるコードは問題を説明します.デッドサイクルです.


package com.ghost.t20140501;

public class MyRunnable implements Runnable{ 
	 public void run() { 
	     System.out.println(" ! ..."); 
	 } 
	 Thread myThread = new Thread( new MyRunnable()); 
	 public static void main(String[] args) {
		new MyRunnable().run();
	}
}

一目でわかるように、これは深刻な問題コードです.しかし、私はこの問題を作成し、実行後にコードを3秒検討してやっとこの問題を発見しました.
主な問題は、パッケージ内のアクセス変数myThreadを宣言し、new Thread(new MyRunnable()を付与することです.
new MyRunnable()を実行すると、MyRunnableの各プロパティに初期値が割り当てられます.このときnew Thread(new MyRunnable()が再び呼び出されました
new MyRunnable()のため、デッドサイクルが発生しました.最終的にjava.lang.StackOverflowError.すなわち、現在のスレッドのスタックはいっぱいであり、Javaスタックは主に基本タイプの変数データとオブジェクトの参照を格納します.
ここでは、オブジェクトを格納する参照です.1つの参照は1つで、果てがありません.限られたリソースは無限のユーザに繰り返し割り当てることはできない.