解决方案 »

  1.   

    调用Thread的start()会另起一个线程执行run()方法,所以thread1()和thread2几乎是同时执行。然后你用多线程的思想来考虑这个问题,复杂点的问题大脑也会超频。。
      

  2.   


    我把改值放在sleep下面的时候 输出就是2000,改值放在sleep上面却是1000,有点懵了
      

  3.   

    Thread.sleep(long)就是当前线程暂停指定毫秒数,然后继续。
      

  4.   

    public static void main(String[] args) {
    Test t = new Test();
    Thread th = new Thread(t);
    try {
    th.start();
    } catch (Exception e) {
    }
    t.thread2();
    }
    调用th.start()将启动一个新线程,新线程并不影响主线程的继续执行,所以th.start()和t.thread2()是同时执行的,thread2()属于主线程,在这个过程中,启动线程也是需要一定的时间的,所以th.start()的时候,t.thread2()已执行了a=2000并sleep(1000),此时新线程启动完成并开始执行a = 1000并sleep(5000),主线程睡眠时间过了继续执行thread2()中的代码System.out.println(a);输出1000,新线程睡眠时间过了便继续执行System.out.println("a = " + a);,所以可以理解为thread2()在thread1()之前执行,所以a=1000;
    按楼主的做法,将红色和绿色换位置后,thread2()马上就sleep(1000),睡眠过程中新线程已启动完成执行a = 1000并sleep(5000),主线程睡眠时间过了便继续执行System.out.println(a);,新线程睡眠时间过了便继续执行System.out.println("a = " + a);,就是这样的。