线程:
class LiftOff implements runnable{
protected int countDown =10;
private static int taskCount=0;
private final int id = taskCount++;
public LiftOff(){

}
public String status(){
return "#"+id+"("+(countDown >0?countDown:"liftDown!")+").";
}
public void run(){
while(countDown-- >0){
System.out.println(status());
Thread.yield();
}
}
用thread
public static void main(String[] args) {

LiftOff lf = new LiftOff();
new Thread(lf).start();
System.out.println("waiting for liftOff");
}
输出:
waiting for liftOff
#0(9).
#0(8).
#0(7).
#0(6).
#0(5).
#0(4).
#0(3).
#0(2).
#0(1).
#0(liftDown!).
不用thread
public static void main(String[] args) {

LiftOff lf = new LiftOff();
lf.run();
System.out.println("waiting for liftOff");
}
输出:#0(9).
#0(8).
#0(7).
#0(6).
#0(5).
#0(4).
#0(3).
#0(2).
#0(1).
#0(liftDown!).
waiting for liftOff疑问:程序不是从主线程main开始然后执行线程吗? 这里的主线程输出语句写在了线程下面为什么thread.start跟runnable.run结果不同呢?

解决方案 »

  1.   

    thread.start新线程,不会阻塞原线程
    runnable.run在原线程执行,阻塞
      

  2.   

    thread.start是由main创建的线程。
    main创建完成后马上就System.out.println("waiting for liftOff");同时新的线程thread执行。
    你在lf.run();后面加个语句Thread.sleep(100);让main线程休息一下,结果就和另一个一样了
    runnable.run没有创建线程,只是相当于在main里面调用了一个普通的方法,顺序执行了。
    run方法不能新建一个线程。