问题请看注释public class AlwaysEven { 
  private int i; 
  public void next() { i++; i++; } 
  public int getValue() { return i; } 
  public static void main(String[] args) { 
    final AlwaysEven ae = new AlwaysEven(); 
    new Thread("Watcher") { 
      public void run() { 
        while(true) { 
          int val = ae.getValue(); 
          if(val % 2 != 0) {          //看代码得话next函数应该总是产生偶数啊,val为偶数猜对
            System.out.println(val);  //为什么会进入到这里呢,难道线程是在next函数执行第一个i++的时候启动了? 
            System.exit(0); 
          } 
        } 
      } 
    }.start(); 
    while(true) 
      ae.next(); 
  } 
} ///:~

解决方案 »

  1.   

    if(val % 2 != 0)        //看代码得话next函数应该总是产生偶数啊,val为偶数猜对 错了吧,val % 2 != 0 是奇数啊
      

  2.   

    问题应该出在next函数 
    i++,i++,另外,这应该是个死循环吧
      

  3.   

    我也是初学,我认为,可能在next执行的过程中,线程就访问i的值,可能导致只执行了一次i++操作
    你该成i=i+2;试试 
      

  4.   

    楼上两位可能误解了,这是thinking in java中得例子,代码看起来不该进入到if(val % 2 != 0)里面得,为啥又会进去呢?
    线程可以随时启动,难道线程是在next函数执行第一个i++的时候启动了? 我感觉不管怎么样线程也要等next函数执行完了才启动吧