多线程里为什么没有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()