あるコードは問題を説明します.デッドサイクルです.
826 ワード
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つで、果てがありません.限られたリソースは無限のユーザに繰り返し割り当てることはできない.