class A implements Runnable {
int i; public void run() {
try {
Thread.sleep(5000);
i = 10;
} catch (InterruptedException e) {
System.out.println("问题1");
}
}
}public class Test {
public static void main(String args[]) {
try {
A a = new A();
Thread t = new Thread(a);
t.start();
// t.join();
int j = a.i;
System.out.println(j);
} catch (Exception e) {
System.out.println("问题2");
}
}
}如果屏蔽t.joinj就是0,如不不屏蔽是10.不明白java.join具体作用,知道的人请给详解。

解决方案 »

  1.   

    t.join();
    表示其它线程都要等到t执行完成后才开始执行。
    所以就出现你所说的结果。
      

  2.   

    如果不加那句话的话,t这个线程还没执行到i=10,主线程就可能把i给打印了
    t.join()是等待t完了再继续
      

  3.   

    t.join();
               join()方法里面调用了wait();方法把进来执行改代码的线程睡在 t的对象上, 
               等t线程把run()方法执行完成后会叫醒所有睡在t对象上的线程