关于Myeclipse中死循环退出的问题。

MR_RichardV 2013-08-28 07:13:47
有三段死循环代码
1.

public void Method()
{
int i = 1;

while(i <= 9 )
{
int j = 1;
while(j<=i)
{
System.out.print(i*j);
System.out.print("\t");
j++;
j = 1; //死循环
}
i++;
System.out.println();
}
}

2.

public void Method()
{
for(int j =1 ;j>0; j++)
{
System.out.print(j);
}
}

3.

public void Method()
{
for(int j =1 ;j>0; j++)
{
System.out.println(j);
}
}

均在MyEclipse10下运行
问题1:代码1 和代码2、3均为死循环,但为何在terminate(停止)的时候代码1 要耗费的时间非常地长。

问题2:代码2 和代码3 的区别在print还是println ,但为何代码2不显示结果,但代码三println正常?
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落夏天 2013-08-28
  • 打赏
  • 举报
回复
问题一确实结束该线程需要很长时间,原理我也不清楚,只是猜测是复杂度比较高,所以导致接近完全占用CPU,导致没有理会结束请求的原因吧。 问题二我这边测试结果很正常,123456这样的,
MR_RichardV 2013-08-28
  • 打赏
  • 举报
回复
引用 5 楼 AA5279AA 的回复:
你那么想看源码,那咱们就看源码把。。 首先调用的是:

 public void println(String x) {
        synchronized (this) {
            print(x);//这个print应该是往里写入内容并输出。
            newLine();
        }
    }
newLine是本类中的私有方法,

 private BufferedWriter textOut;
    private OutputStreamWriter charOut;
 private void newLine() {
        try {
            synchronized (this) {
                ensureOpen();//判断输出流是否为空
                textOut.newLine();//换行
                textOut.flushBuffer();//flushBuffer这个方法找不到了。估计是刷新输出流往外输出的作用。
                charOut.flushBuffer();
                if (autoFlush)
                    out.flush();
            }
        }
        catch (InterruptedIOException x) {
            Thread.currentThread().interrupt();
        }
        catch (IOException x) {
            trouble = true;
        }
    }
ensureOpen方法私有,判断输出流是否为空

 private void ensureOpen() throws IOException {
        if (out == null)
            throw new IOException("Stream closed");
    }
然后我们再看newLine方法:

public void newLine() throws IOException {
        write(lineSeparator);
    }

再看lineSeparator lineSeparator = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator")); OK了吧。这里定义一个换行。。。
万分感谢!很详细!
失落夏天 2013-08-28
  • 打赏
  • 举报
回复
你那么想看源码,那咱们就看源码把。。 首先调用的是:

 public void println(String x) {
        synchronized (this) {
            print(x);//这个print应该是往里写入内容并输出。
            newLine();
        }
    }
newLine是本类中的私有方法,

 private BufferedWriter textOut;
    private OutputStreamWriter charOut;
 private void newLine() {
        try {
            synchronized (this) {
                ensureOpen();//判断输出流是否为空
                textOut.newLine();//换行
                textOut.flushBuffer();//flushBuffer这个方法找不到了。估计是刷新输出流往外输出的作用。
                charOut.flushBuffer();
                if (autoFlush)
                    out.flush();
            }
        }
        catch (InterruptedIOException x) {
            Thread.currentThread().interrupt();
        }
        catch (IOException x) {
            trouble = true;
        }
    }
ensureOpen方法私有,判断输出流是否为空

 private void ensureOpen() throws IOException {
        if (out == null)
            throw new IOException("Stream closed");
    }
然后我们再看newLine方法:

public void newLine() throws IOException {
        write(lineSeparator);
    }

再看lineSeparator lineSeparator = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator")); OK了吧。这里定义一个换行。。。
MR_RichardV 2013-08-28
  • 打赏
  • 举报
回复
引用 3 楼 AA5279AA 的回复:
[quote=引用 2 楼 q1q111 的回复:] [quote=引用 1 楼 AA5279AA 的回复:] 问题一确实结束该线程需要很长时间,原理我也不清楚,只是猜测是复杂度比较高,所以导致接近完全占用CPU,导致没有理会结束请求的原因吧。 问题二我这边测试结果很正常,123456这样的,
首先谢谢您的回答,您是说您用print(j)也会得到结果是么?[/quote] print和println的区别只是后者换行而已, 使用print当然会得到结果。。[/quote] 您按ctrl进入print和println的定义,那个println的后面的那个输出空行的方法貌似是一个输出缓存的过程,具体我也没搞懂。
失落夏天 2013-08-28
  • 打赏
  • 举报
回复
引用 2 楼 q1q111 的回复:
[quote=引用 1 楼 AA5279AA 的回复:] 问题一确实结束该线程需要很长时间,原理我也不清楚,只是猜测是复杂度比较高,所以导致接近完全占用CPU,导致没有理会结束请求的原因吧。 问题二我这边测试结果很正常,123456这样的,
首先谢谢您的回答,您是说您用print(j)也会得到结果是么?[/quote] print和println的区别只是后者换行而已, 使用print当然会得到结果。。
MR_RichardV 2013-08-28
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
问题一确实结束该线程需要很长时间,原理我也不清楚,只是猜测是复杂度比较高,所以导致接近完全占用CPU,导致没有理会结束请求的原因吧。 问题二我这边测试结果很正常,123456这样的,
首先谢谢您的回答,您是说您用print(j)也会得到结果是么?

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧