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就只会显示三次,请问为什么???
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就只会显示三次,请问为什么???
还用设置一下吗?
一般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;
}
}
main()中的i和Incrementer()中的i不同,所以Incrementer()中的i没有初始化,是个随机值;
如果楼主还不理解,
那你把System.in.read(); 这句,换成new InputStreamReader(System.in).read();试一试。
应该就没有那个什么劳神子的问题了。
System.in.read(); //为什么i=3,以后就退出呢?退出的条件是什么??
System.out.println("i="+i++);
System.out.println(incrementer.getI());
}
这个问题还是不太清楚,为什么会自动的执行前3次。