start() 和 run()的区别说明
start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用,真正的实现了多线程并发运行。
run() : 方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到多线程的目的!
代码示例:
1. 实现Runnable接口
public class ThreadStartAndRun implements Runnable {
private int num = 2;
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (num > 0) {
System.out.println(Thread.currentThread().getName() + ",i=" + num--);
} else {
break;
}
}
}
}
2. start()
方法开俩个线程
public static void main(String[] arg) {
for (int i = 0; i < 2; i++) {
Thread t=new Thread(new ThreadStartAndRun());
t.start();
}
}
输出结果:
Thread-0,i=2
Thread-1,i=2
Thread-0,i=1
Thread-1,i=1
可以看出 start()
方法开启了俩个线程并发执行了
3. run()
方法同样开俩个线程
public static void main(String[] arg) {
for (int i = 0; i < 2; i++) {
Thread t1 = new Thread(new ThreadStartAndRun());
t1.run();
}
}
输出结果:
main,i=2
main,i=1
main,i=2
main,i=1
可以发现 run()
程序中依然只有主线程这一个线程,并且是顺序执行