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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值