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栈主要存放基本类型的变量数据和对象的引用。
这里就是存放对象的引用,一个引用一个,没有尽头。有限的资源是无法无重复地分配给无限的使用者的。