第一个问题:就是下面的代码,main线程和子线程是分别运行的~~!那么我让t1休眠,那么main(主)线程不应该是继续往下跑的吗?  那么为什么不会先打印出t2 的内容,然后再打印t1呢? 这样让我感觉,不过是t1或者t2休眠,都是主线程也休眠了!!第二个问题:主线程休眠的时候,子线程是不是还在运行?第三个问题:和第一个问题类似,就是把 t2.start(); 写在 t1.sleep(2000);后面,结果直接t1打印完了,等2秒打印出t2,我晕,这样不是停止了 主线程了嘛~~ 
请求高手帮忙~~ 小弟先谢谢了!!   
ps。 在自学,网上的教程或者老师讲的,很多都没讲到这些东西吧~~!讲线程就介绍了 run() start() interrupt() sleep()  wait()  ... 等等介绍方法和用法就了事~~~  想我这样的菜鸟有问题,只能这样来问了~~  膜拜高手public class ceshi {
public static void main(String[] args) throws InterruptedException {
renwu r1 = new renwu("a");
Thread t1 = new Thread(r1);
renwu r2 = new renwu("b");
Thread t2 = new Thread(r2);
t1.start();
                  t2.start();
t1.sleep(2000);
//为什么这里会相当于停了主线程?
//t1线程本身没有停止?主线程停了。
//那么,这个Thread.currentThread().sleep(200);又有什么意义?
//t2.sleep(200);和t1的也就都没区别了,都是停主线程~~
}
}
class renwu implements Runnable {
private String name; renwu(String name) {
this.name = name;
} public void run() {
for (int i = 0; i < 20; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(name + i + " ");
}
}
}

解决方案 »

  1.   

    你怎么能确定主线程停了,你在
    t1.start();
    t2.start();
    t1.sleep(2000);
    后面就没有代码了,感觉好像是main停止了似的,你把后面再添加点代码比如说输入了什么的在看看,这里相当于t1,t2,main线程三个同时进行
      

  2.   

    你这样当然看不出结果了,你在main方法末写上
    for(int i = 0; i < 200; i++){
       System.out.println(Thread.currentThread().getName());}这样答案就很清楚了你也可以同时把这段代码写入下面的run方法中
    那么你就更清楚了
      

  3.   

    按照我的理解,如你所说,main也作为线程跟其他线程并行运行。但是对于sleep方法可能有误区。按定义sleep()作用是使得当前线程(也就是调用sleep()方法的线程)暂时运行指定毫秒长的时间。sleep是一个静态方法,理解准定义是:sleep()会是调用这个方法的线程休眠!按你给的代码,sleep()休眠的并不是t1,而是调用调用sleep方法的main主线程,所以休眠的应该是主线程。至少测试上是跟这个理论符合。这应该是静态方法的特点。不知道说的对不对
      

  4.   


    他说得对,sleep是一个静态方法。The static method sleep(long) from the type Thread should be accessed in a static way
      

  5.   

    sleep方法是静态方法,并不是说你的t1.sleep()就是认为是t1调用了sleep()方法而使t1线程睡眠,而是你main线程中的代码调用了sleep()方法,也就是应该产生作用的是对main线程,main线程会运行到sleep()之后睡眠2秒再执行下面的代码,如果你的2个线程的start()是在sleep()之上,就直接执行2个线程的run()方法;如果其中一个start()是在sleep()下面,就先执行上面的start(),2秒之后再执行下面的start()方法。应该是这样。
      

  6.   


    因为你先new的a,所以a先执行的几率比较高。
      

  7.   

    我觉得t1和t2都是线程,一旦开始就会进行,要t1停止应该在类中控制,它运行在什么时候停止,这里t1和t2是一样的,哪个前面就谁先执行,当t1.sleep()在最后面时,它们是同时执行的,间隔。
      

  8.   

    线程有的运行叫做抢占式的,呵呵,sleep谁谁就睡一会儿!不影响其它的哦!