日期:2014-05-20  浏览次数:20733 次

关于java并发的一个程序
Java code
package com.link.tongbu;

import java.util.concurrent.TimeUnit;

public class Test3 {
    private static boolean stop;
    public static void main(String[] args) throws InterruptedException {
        Thread thread =  new Thread(new Runnable() {            
            @Override
            public void run() {
                int i=0;
                while(!stop) {
                    i++;
                }
                System.out.println("退出");
            }
        });
        thread.start();
        TimeUnit.SECONDS.sleep(1);
        stop = true;
    }
}



这是书上的例子程序,书上说这个程序并不会停留一秒钟之后就退出了run方法,而是在run方法做无线循环。。。
求大牛解释下···尽量详细点吧 最近在看并发的东西 感觉好难。。

------解决方案--------------------
这书上的例子,测试过了不?

我觉得没啥道理,本机环境测试了下,也并不会做无限循环,立即就结束了。
------解决方案--------------------
静态的stop是不是应该先初始化? private static boolean stop= true;
再把while(!stop)该成while(stop)
------解决方案--------------------
书错了,这个经常会碰到的,........
------解决方案--------------------
程序没问题,LZ把时间设大点再观察下
------解决方案--------------------
你这个代码确实有点问题,当运行方法的时候程序先走thread.start();这个方法,在这里的时候由于是线程,所以程序就要分两路并发同时走,线程里面的的方法一直运行,但是你那个程序里面的start方法下面把
stop赋值为true;这样让while(!stop)的值变成了false所以程序就要停止,
结论:该线程方法只运行了1秒钟,就停了;你在while循环中加个打印语句就能看出来:
 while(!stop) {
 i++;
 System.out.println(i);}

楼上的人说直接就停了是因为时间太短你没在里面打印东西所以看不出来;下面是我给你改了的代码你试试:
如果你要想让程序不停的话直接把下面这句
TimeUnit.SECONDS.sleep(1);
stop = true;
的stop=true改成stop=false;就行了。我给你改好了一个你试试

public class Test {
private static boolean stop;
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
int i=0;
while(!stop) {
i++;
System.out.println(i);
}
System.out.println("退出");
}
});
thread.start();
TimeUnit.SECONDS.sleep(1);
stop = true;

}
}