Android、Java面试题:Thread的start和run方法的区别
Thread类是继承Runnable的,所以其run()方法是对Runnable接口实现。
public class Thread implements Runnable {
...
}
在Thread中实现的run()方法,只是简单的调用其内部target的run方法
@Override
public void run() {
if (target != null) {
target.run();
}
}
这个target就是我们在初始化Thread时传入的Runnable对象。
所以从本质上来讲,run方法并没有开启新的线程,run方法本身执行在调用线程中。
而start()方法,则是真真正正的创建了新的线程(通过nativeCreate方法)
public synchronized void start() {
if (started)
throw new IllegalThreadStateException();
group.add(this);
started = false;
try {
nativeCreate(this, stackSize, daemon);
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
}
总结,Thread的start方法开启了线程,并在线程中执行了run方法,而run则只是在当前线程中执行了其构造函数中传入的Runnable对象的run方法。