一段代码说明一个问题——死循环

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栈主要存放基本类型的变量数据和对象的引用。

这里就是存放对象的引用,一个引用一个,没有尽头。有限的资源是无法无重复地分配给无限的使用者的。

你可能感兴趣的:(记录)