`

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

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

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

分享到:
评论

相关推荐

    在嵌套循环中的死循环问题

    然而,在使用循环的过程中,尤其是涉及多层嵌套循环时,很容易遇到一个常见的问题——死循环。本文将通过一个具体的C语言代码示例来探讨在嵌套循环中出现死循环的原因及其解决方法。 #### 二、问题分析 在给定的...

    流程图——循环结构.ppt

    循环结构在计算机编程和算法设计中扮演着至关重要的角色,它允许我们重复执行某段代码,直到满足特定条件为止。本节课重点讲解了两种类型的循环结构:当型循环(While循环)和直到型循环(Do-While循环)。 首先,...

    javascript学习之循环结构(4)—— do while循环结构

    在JavaScript编程语言中,循环结构是程序控制流程的重要部分,它允许我们重复执行一段代码,直到满足特定条件为止。在循环结构系列的第四部分,我们将深入探讨“do while”循环,这是一种特殊的循环类型,它的特点是...

    C语言程序设计——循环结构PPT学习教案.pptx

    循环结构允许我们重复执行一段代码,直到满足特定的条件。在学习C语言的过程中,掌握循环结构是至关重要的,因为它是实现程序自动化执行的基本工具。 在本篇教案中,我们将详细介绍三种基本的循环结构:while循环、...

    Axure夜话之程序员眼中的原型设计视频教程之循环操作之死循环

    在这个“Axure夜话之程序员眼中的原型设计视频教程”中,我们将会探讨一个特别的议题——循环操作,特别是如何避免和处理死循环。 死循环,顾名思义,是指程序中的循环结构无法自行终止,导致程序无限制地执行下去...

    实验2-编译器级别的代码优化对比实验——C#.rar

    - **死代码删除**:如果一段代码不会被执行,编译器会将其删除。 - **常量折叠**:编译器可以提前计算出常量表达式的结果,避免运行时计算。 - **循环展开**:对于简单的循环,编译器可能会将其展开,减少迭代...

    编译原理课设——制导翻译

    "编译原理课设——制导翻译" 是一个典型的实践项目,旨在帮助学生深入理解编译器的工作原理,并通过实际操作来掌握编译过程的关键步骤。在这个项目中,我们将探讨以下几个核心知识点: 1. **词法分析**:这是编译器...

    c代码-循环条件为死循环

    在C语言编程中,"循环条件为死循环"是一个重要的概念,它涉及到程序控制流的基础——循环结构。循环是让程序重复执行一段代码直到满足特定条件为止的关键工具。当循环条件设计得不正确或者故意设置成始终为真时,就...

    预备工作1——了解你的编译器

    **预处理器**是在编译开始前由编译器调用的一个独立程序。它的主要任务包括但不限于删除注释、包含其他文件、执行宏替换等。预处理器对于简化代码、增强代码复用性和提高开发效率具有重要作用。 - **宏替换**:通过...

    mbot机器人巡线程序-mBot机器人编程——用机器人的逻辑思考问题.pdf

    为了防止机器人在迷宫中陷入死循环,他们需要运用随机数策略,这对于提升孩子们解决复杂问题的能力具有显著效果。 循线机器人项目通过使用双灰度传感器和设定特定的规则,让机器人沿着设定好的路线行走。这个项目...

    code_编译原理实验-中间代码生成_

    中间代码的主要目标是提供一个统一的平台,以便进行后续的优化步骤,如死代码消除、循环展开、常量折叠等。常见的中间代码表示有三地址码(Three-Address Code)、四元式(Quad)以及树形结构等。在这个实验中,学生...

    redis——分布式锁.zip

    但是续租操作必须谨慎处理,以防止死循环或丢失锁。 6. **解锁策略**: 解锁通常有两种策略:客户端主动解锁和超时自动解锁。客户端在完成任务后应立即删除 key(使用 `DEL` 或 `UNLINK` 命令),而超时自动解锁则...

    编译原理实验代码.rar

    词法分析(也称为扫描)是编译过程的第一步,它的任务是将源代码分解成一个个有意义的符号——记号(Token)。这些记号通常是关键字、标识符、常量、运算符等。在这个阶段,代码被读入并识别出它的基本组成单元,为...

    可变目标C编译器——设计与实现.pdf

    此外,现代编译器往往会包含许多高级的优化技术,如指令级并行(Instruction-Level Parallelism, ILP)优化、循环展开(Loop Unrolling)、死代码消除(Dead Code Elimination)等。这些优化技术可大幅提高目标代码...

    编译原理——陈意云

    这一阶段将源代码划分为一个个有意义的单元,称为标记(Token),如关键字、标识符、常量和运算符等。词法分析器根据预定义的规则(词法规则)识别这些标记,为后续的语法分析提供输入。 2. **语法分析**:基于上...

    编译原理实验:词法分析,语法分析和中间代码生成及优化

    词法分析是编译器的第一步,它将源代码分解成一个个有意义的单元——称为“词法单元”或“记号”(tokens)。在实验1“词法分析v2.pdf”中,你可能会学习如何使用lex(在Linux环境下通常称为flex)工具来定义规则,...

    语义分析代码 1234

    此外,现代编译器还可能涉及优化阶段,如死代码消除、常量折叠和循环展开,以提高生成代码的效率。 在压缩包文件"src"中,可能包含了实现这些编译原理的源代码文件。开发者可以研究这些代码来理解编译器的工作原理...

    UnderCV_C++编译器源代码.rar

    这一阶段,编译器将源代码分解为一个个基本单元——词法单元(Token),如关键字、标识符、运算符等。UnderCV的词法分析器会识别并处理这些单元,为后续的解析过程做准备。 3. 语法分析 在这一阶段,编译器依据...

    编译原理目标代码

    编译器可以使用不同的优化技术在这个阶段对代码进行改进,比如死代码消除、常量传播和循环展开。 最后,目标代码生成阶段将中间代码转化为特定机器的机器语言,这个过程通常涉及寄存器分配、指令选择和代码布局。...

    编译原理课程设计——编译器

    在这个课程设计中,我们关注的是构建一个基本的编译器,该编译器能够完成词法分析、语法分析以及中间代码生成这三个核心步骤。 **词法分析**是编译器的第一步,它将源代码分解成一系列称为“记号”(Token)的单元...

Global site tag (gtag.js) - Google Analytics