美文网首页Andorid面试
Android、Java面试题:Thread的start和run

Android、Java面试题:Thread的start和run

作者: Random92 | 来源:发表于2021-01-27 14:19 被阅读0次

    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方法。

    相关文章

      网友评论

        本文标题:Android、Java面试题:Thread的start和run

        本文链接:https://www.haomeiwen.com/subject/uahazktx.html