直接编译执行即可,执行时候注意添加输入参数 true 或 falsepublic class a1 {
public static void main(final String[] args) { Thread m = new Thread(new Runnable() {
public void run() {
int j = 1;
while (true) {
j++;
boolean b = Boolean.parseBoolean(args[0]);
if (b) {
System.out.println(b);
System.out.println(j);
}
if (j == 10) {
try {
System.out.println("j == 10:" + j);
Thread.sleep(3000);
} catch (InterruptedException e1) {
System.out.println("e1");
}
}
}
}
}); m.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("e");
} System.out.println("bbbbbbb");
m.interrupt();
System.out.println("ccccccc");
}
}
为什么b为true的时候跟b为false的时候结果不同呢?
b为true只是输出了sysout打印啊,为什么结果不同呢?

解决方案 »

  1.   

    b为false时,子线程 一直在运行,但是没输出。修改一下就好了
    把 if (b) 删除了 
      

  2.   

    为什么设置b = true,则会每隔13秒循环输出j == 10:10呢?
      

  3.   


    为什么设置b = true,则会每隔13秒循环输出j == 10:10呢?
      

  4.   


    boolean b = Boolean.parseBoolean(args[0]);
    分别修改为
    boolean b = true;
    boolean b = false;
    boolean b = Math.random() > 0.5d;然后编译执行,3个执行结果有的过程是怎样的???????????????????
      

  5.   

    b的状态决定程序的流程,楼主要了解interrupt()的作用,线程在休眠的时候捕获异常,这个可以看得很清楚。(与b的状态没有关系啊!)。
      

  6.   

    “为什么设置b = true,则会每隔13秒循环输出j == 10:10呢?” 没有这种情况出现。
      

  7.   


    说错了不好意思!
    是b = false的时候,会输出:
    j == 10:10
    bbbbbbb
    ccccccc
    e1
    j == 10:10
    之后每隔13秒输出一个
    j == 10:10
      

  8.   


    我的标题起的的确会引起歧义,真的不好意思
    我只是想知道,b = true的时候输出的值跟b = false时输出的值是不同的,但是内部的逻辑是怎么走的我没明白
    还有一个,如果设置b = Math.random() > 0.5d;这个输出的值为什么会跟b = true的值一样的呢?难道Math.random的值每次都会大于0.5么?
      

  9.   

    程序在b=false时,一直循环,每循环一次 j++计算一次,等到大约13秒后,4个字节的整数变成-1,(ff ff ff ff),再累加的话,就从j=0又开始了。 到j=10的时候,会有一次输出。
      

  10.   

    b=Math.random()>0.5d; 这时b是随机的,有时是true,有时是false. 与设置b=true不一样,(j没有全部输出,那些就是b=Math.random()>0.5d为false 时跳过了。你仔细看一下。
      

  11.   

    如果CPU不同的话,可能就不是13秒了,快一点或者慢一点吧?
    原来是加到临界点又加回去了,非常感谢!
      

  12.   

    如果CPU不同的话,可能就不是13秒了,快一点或者慢一点吧? 
    是的,与机器有关。