Java Thread 的 run() 与 start() 的区别
一、start 和 run 方法解释:
1) start:用 start 方法来启动线程,真正实现了多线程运行,这时无需等待 run
方法体代码执行完毕而直接继续执行下面的代码。通过调用 Thread 类的 start()
方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一
旦得到 cpu 时间片,就开始执行 run() 方法,这里方法 run()称为线程体,它包
含了要执行的这个线程的内容,Run 方法运行结束,此线程随即终止。
2) run : run()方法只是类的一个普通方法而已,如果直接调用 Run 方法,程序
中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执
行,还是要等待 run 方法体执行完毕后才可继续执行下面的代码,这样就没有
达到写线程的目的。总结:调用 start 方法方可启动线程,而 run 方法只是
thread 的一个普通方法调用,还是在主线程里执行。这两个方法应该都比较熟
悉,把需要并行处理的代码放在 run()方法中,start() 方法启动线程将自动调用
run()方法,这是由 jvm 的内存机制规定的。并且 run()方法必须是 public 访问权
限,返回值类型为 void。
二、对 Java 线程的补充说明:
Java 的线程是通过 java.lang.Thread 类来实现的。VM 启动时会有一个由主方
法所定义的线程。可以通过创建 Thread 的实例来创建新的线程。每个线程都是
通过某个特定 Thread 对象所对应的方法 run()来完成其操作的,方法 run()称
为线程体。通过调用 Thread 类的 start()方法来启动一个线程。
在 Java 当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。
第一是创建状态。在生成线程对象,并没有调用该对象的 start 方法,这是线程
处于创建状态。
第二是就绪状态。当调用了线程对象的 start 方法之后,该线程就进入了就绪状
态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状
态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。
第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时
线程就进入了运行状态,开始运行 run 函数当中的代码。
第四是阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的
发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait 等方法都可
以导致线程阻塞。
第五是死亡状态。如果一个线程的 run 方法执行结束或者调用 stop 方法后,该
线程就会死亡。对于已经死亡的线程,无法再使用 start 方法令其进入就绪。
评论0
最新资源