真是不解。main方法中有如下代码:
                   Thread t= new Thread() {
public void run() {
for(int i = 0; i<10000; i++) {
System.out.println(i);
}
                        }
};
t.start();
                //之后让t线程睡眠
                  t.sleep(10000);
                //some other method here
问题是其他方法根本就不能执行,无论t线程是否终止,都要等10秒才能接着执行。请问这是为什么?
t线程和主线程不是两个线程吗?
                

解决方案 »

  1.   

    把t.sleep(10000)改成Thread.sleep(10000),并放到t的run方法中去。sleep()是Thread类的静态方法,作用是让当前执行的线程睡眠,你的sleep()方法是main线程调用的,当然就是让main线程睡眠,而不是让t睡眠。
      

  2.   

    可是t是指向Thread对象的引用啊。虽然我在main方法中调用t.sleep(n),可是这相当于new Thread().sleep(n),睡眠的应该是t线程,怎么回是main线程呢?
      

  3.   

    Thread.sleep()是静态方法,所以t.sleep(10000)这种写法是很容易引起误解的,是应该避免的,因为它实际上就是Thread.sleep(10000)。你在哪个线程中执行sleep(),睡眠的就是哪个线程,t.sleep(10000);这句出现在main线程中,而它实际上就是Thread.sleep(10000),所以当然就是让main睡眠了。记住,一个线程是没有办法让另一个线程睡眠的。