日期:2014-05-20  浏览次数:20701 次

多线程里为什么没有start()方法--谢谢
package   com.yema.bao;

public   class   RunnableDemo   {

public   static   void   main(String[]   args)   {

Xian1   x1   =   new   Xian1();
Xian2   x2   =   new   Xian2();
x1.run();//这里为什么start()方法
x2.run();//这里为什么start()方法
//我这个问题就是要实现多线程,
}

}

class   Xian1   implements   Runnable   {

public   void   run()   {
for   (int   i   =   0;   i   <   10;   i++)   {
System.out.println(i);
}

}

}

class   Xian2   implements   Runnable   {

public   void   run()   {
for   (int   i   =   (int)   'a ';   i   <=   (int)   'z ';   i++)   {
System.out.println((char)   i);
}

}

}

------解决方案--------------------
x1.run();//这里为什么start()方法
======
(new Thread(x1)).start()
------解决方案--------------------
这里不可以调用run方法,run方法是当你调用start方法的时候,线程类会自己获得线程环境,并调用相应的run方法。
也就是说run方法不是你手动调用的,而是由实例通过start方法自动调用的!!
------解决方案--------------------
LZ的程序没有多线程啊,new Thread(x1).start()才能创建并启动多线程,本质上start()执行的是一个对run()的调用。
------解决方案--------------------
这样相当于只是调了一个普通的方法,还是应该调用start(),只要调有参构造器,(Runnable ...),调用start()就会自动调用run()
------解决方案--------------------
Thread类才有start()