import java.io.IOException;
 class TreadDemo
{
    public static void main(String[] args) throws IOException
    {
        Incrementer incrementer = new Incrementer();
        incrementer.start();
        System.out.println("Repeatedly pressEnter to get the current value of i:");
        for(int i=1;;)    {
            System.in.read();  //为什么i=3,以后就退出呢?退出的条件是什么??
            System.out.println("i="+i++);
            System.out.println(incrementer.getI());
        }
    }
}
class Incrementer extends Thread
{
    private int i;
    public void run()
    {
        for(;;)
        {
            i++;
            yield();
        }
    }
    public int getI()
    {
        return i;
    }
}这个线程好象没有终止条件,但为什么在eclipse和jcreator就只会显示三次,请问为什么???

解决方案 »

  1.   

    yield();
    还用设置一下吗?
      

  2.   

    不是i=3就退出了吧,而是要等待下一次输人后,继续输出。
    一般DOS系列认为会回车换行是2个字符,遇到回车符自动加上换行符,所以占两个字符(ASCII是13和10)。
    System.in.read();每次读入一个字符(ASCII码),所以你就输入一个回车键的话,就执行两次。import java.io.IOException;
     class A
    {
        public static void main(String[] args) throws IOException
        {
    int k;
            Incrementer incrementer = new Incrementer();
            incrementer.start();
            System.out.println("Repeatedly pressEnter to get the current value of i:");
            for(int i=1;;)    {
                k=System.in.read();  //注意:在这你可以获取并且看到你读到内容的ASCII码的值
        System.out.println("k="+k);
                System.out.println("i="+i++);
                System.out.println(incrementer.getI());
            }
        }
    }
    class Incrementer extends Thread
    {
        private int i;
        public void run()
        {
            for(;;)
            {
                i++;
                yield();
            }
        }
        public int getI()
        {
            return i;
        }
    }
      

  3.   

    i=3时 线程并没有退出,而是等待read();
    main()中的i和Incrementer()中的i不同,所以Incrementer()中的i没有初始化,是个随机值;
      

  4.   

    7楼正解。
    如果楼主还不理解,
    那你把System.in.read(); 这句,换成new InputStreamReader(System.in).read();试一试。
    应该就没有那个什么劳神子的问题了。
      

  5.   

      for(int i=1;;)    {
                System.in.read();  //为什么i=3,以后就退出呢?退出的条件是什么??
                System.out.println("i="+i++);
                System.out.println(incrementer.getI());
            }
    这个问题还是不太清楚,为什么会自动的执行前3次。