本帖最后由 xuemeng 于 2013-5-14 23:50 编辑
粗心害死人, 哈哈!!1
01.public class ConcurrencyTest {
02. private static boolean flag;
03. public static void main(String[] args) throws InterruptedException {
04.
05. Thread newThread=new Thread(new Runnable(){ //newThread线程构造
06. public void run(){
07. int i=0;
08. while(!flag)//你的while循环没有大括号啊, 那么当程序执行while循环的时候,就只会执行i++, 执行i++ 然后判断while循环的条件, 然后再执行i++, 再循环判断,一直死循环, 当一秒中的时间到了之后, 那么就打印出一个i的值, 如果这里换成输出语句, 那么当然能够一直打印啊, 因为 你一进入while循环, 那么就执行输出语句, 然后再循环, 再执行输出语句, 知道你停止的时间到,然后改变循环条件. 你的代码如果非要 i ++; System.out.pirntln(i)这样写, 那么while就要加大括号, 把 i++ 和 System.out.println(i)这两句代码都括起来, 这样while循环才会执行这两句代码,而不是仅仅执行i++一句代码. 具体修改代码我再写一下;
09. i++; // --> b. 可是,如果此句换成 System.out.println(i++); // 就可以打印出结果,程序在一段循环后停止
10. System.out.println(i); // --> a. 打印看i在多少的时候 flag被改变了
11. }
12. });
13.
14. newThread.start();
15. TimeUnit.SECONDS.sleep(1); // 挂起1秒
16. flag=true; // 改变flag企图让newThread的while循环停止
17. }
18.}
修改代码如下::
public class Demo {
private static boolean flag;
public static void main(String[] args) throws InterruptedException {
Thread newThread = new Thread(new Runnable() {
public void run() {
int i = 0;
// 就是在while循环加了个大括号就行了
while (!flag) {
i++;
// 加上括号后, 这段输出语句也在while循环里面了
System.out.println(i);
}
}
});
newThread.start();
TimeUnit.SECONDS.sleep(1);
flag = true;
}
}
|