其实,run()和start()区别很简单。
当你启动线程,使用start(),系统会把run()方法当成线程执行体来处理,这是正常的,也是正确的情况。但是,当你启动线程时,调用run()方法,系统run()方法会立即执行,但是这时候系统会把run()方法当成普通的方法,线程对象也当成一个普通对象。
不理解我上面说的话?那我就在解释一下。
第一个问题,为什么要有多线程。这个问题的答案可以搜索到很多。我这边给出我理解的,不怎么官方的答案:创建一个线程,就是为了在原有主线程的基础上,创建一个新的任务,以达到想要的效果。
既然如此,如果我们调用run()方法,系统会把run()方法当成普通的方法,就不能达到创建一个新的任务的目的。
第二个问题,线程如何创建。最常见的有两种,继承Thread类和实现Runnable接口。当然还有像 实现Callable接口 的方式创建线程。这些方法,都类似的要把run()方法重写,把run()方法包装成线程执行体。(实现Callable接口 的方法,要把call()包装成线程执行体)。可见run()只是线程类的一个方法。
既然如此,如果要启动一个线程,当然要调用strat(),如果调用run(),则是调用线程类的一个run()方法,这在系统看来,不过是调用一个很普通的类(线程类)中的一个普通的方法(run()方法),会一视同仁的在主线程上面执行。
更多内容请关注微信公众号“外里科技”
官方公众号 |
外里科技 |
运营公众号 |
英雄赚 |
开源代码 |