import java.util.*;
public class TT implements Runnable{
    public int i =100;
    public synchronized void m1(){
        i=1000;
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("i="+i);
    }
    public void m2(){
        i=2000;
System.out.println("i="+i);
        try {
            Thread.sleep(250);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void run() {
        m1();
    }
    public static void main(String [] args){
        TT tt = new TT();
       Thread tr=new Thread(tt);
        tr.start();
        tt.m2();
        
    }
}
为什么会有三种输出结果?一种是2000,1000,一种是1000,1000,一种是2000,2000。第三种较少发生,求解释

解决方案 »

  1.   

    因为你程序中存在3个线程,main所在的线程,tt线程,tr线程。这三个线程执行的先后顺序程序员没有办法精确控制,所以出现了三种情况。
    又因为run执行完,线程也就结束了,自然不会有更多的打印,现在的两个打印分别是m1和m2中打印的,
    明白了吧
      

  2.   

    这个TT线程 是哪个线程?应该只有TR线程和MAIN线程吧