Java多线程系列-start()和run方法的区别
Posted viscu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程系列-start()和run方法的区别相关的知识,希望对你有一定的参考价值。
- start()和run是Thread类里面的两个方法。
学过的都知道,我们创建了一个线程类,通过调用start()方法来启动线程,并且该线程会执行内部的run()方法,那么我们可以直接调用run()方法吗。
答案显而易见,当然是可以啊,可是前后两者还是有本质的区别的。
start()
和run()
- 调用start()方法,会创建一个新的线程,而这个新的线程会执行Thread类中的run方法
- 调用run()方法,不会创建新的线程,而是直接在当前的线程直接执行该方法。
以上就是这两个方法的本质区别,并且大多数情况下,直接调用run()的错误的。
public class StartAndRunTest {
private static class MyThread extends Thread{
private String name;
public MyThread(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println(name+" running in "+Thread.currentThread().getName());
}
}
public static void main(String[] args) {
MyThread m1=new MyThread("m1");
MyThread m2=new MyThread("m2");
m1.start();
m2.run();
}
}
/*
m2 running in main
m1 running in Thread-0
*/
上面的例子你可以看到,调用start的Thread类在新的线程上执行run方法,而直接调用run()方法的则是在当前main线程。(一个线程不能重复start(),具体可以看内部实现)
以上是关于Java多线程系列-start()和run方法的区别的主要内容,如果未能解决你的问题,请参考以下文章
Java多线程系列 基础篇03 Thread中start()和run()的区别
java 多线程系列基础篇之join()start()run()方法