两个线程同时运行,
在主线程运行到System.out.println("j="+j);时
另外一个线程还没有运行到i=10;
所以结果是
j=1
i=10
————————————————————————————-
换成这样试试:
class A implements Runnable{
    public int i=1;
    public void run(){
        i=10;
        System.out.println("i="+i);
    }
}public class Test{
    public static void main(String args[]){
        A a=new A();
        new Thread(a).start();
        for(int c=1;c<10;c++){
            System.out.println("temp "+c); 
        }
        int j=a.i;
        System.out.println("j="+j);
    }
}————————————————————————————————
在dos下运行
其中的一次结果为
temp 1
temp 2
temp 3
j=10
temp 4
temp 5
temp 6
temp 7
temp 8
temp 9
i=10但是用java Test >>1.txt输出到文本
结果为
temp 1
temp 2
temp 3
temp 4
temp 5
temp 6
temp 7
temp 8
temp 9
j=1
i=10
主线程运行太快了!

解决方案 »

  1.   

    或者:
    class A implements Runnable{
        public int i=1;
        public void run(){
            i=10;
            System.out.println("i="+i);
        }
    }public class Test extends Thread{
        public static void main(String args[]){
            A a=new A();
            new Thread(a).start();
            try{
                sleep(1000);
            }
            catch(InterruptedException e){
            }
            int j=a.i;
            System.out.println("j="+j);
        }
    }
      

  2.   

    to  Sherwin(JAVA是蛮不错的东东) :
      你之前给出的例子,在dos下运行的结果真的是那样的吗?
      我运行了一下,整个循环的输出还是完整的。循环和j的输出应该是同属于主线程,所以,我觉得循环的输出应该总是在j的输出之前。我不明白为什么j能在循环的中间被输出。能给我讲解一下吗?
    呵呵~~~
      多谢了!!