Thread的run()与start()的区别

来源:互联网 发布:什么软件有耽美动漫 编辑:程序博客网 时间:2024/04/30 06:20
Java的线程是通过java.long.Thread类来实现的。VM启动时会有一个由主方法所定义的线程。
可以通过创建Thread的实例来创建新的线程。每个线程都是通过某个特定的Thread对象对应的run方法来完成其操作的,
run方法称为线程体。通过调用Thread类的start方法来启动一个线程。
在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞、死亡
     第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这就是线程处于创建状态。
     第二是就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,
但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。
     第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入运行状态,开始运行run函数当中的代码。
     第四是阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续执行。sleep,suspend,wait等方法都可以导致线程阻塞。
     第五是死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。

*实现并启动线程的两种方法:
1.写一个类继承自Thread类,重写run方法,用start方法启动线程。
2.写一个类实现Runnable接口,实现run方法,用new Thread(Runnable target).start()方法来启动

-start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类start方法来启动一个线程,这是此线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run来完成其运行操作的,这里方法run称为线程体,它包含了要执行的这个线程的内容,run方法运行结束,此线程终止,然后CPU再调度其他线程。

-run()方法当做普通方法的方式调用。程序还是要顺序执行,要等待run方法执行完毕后,才可继续执行下面的代码;程序中只有主线程--这一线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。

多线程就是分时利用CPU,宏观上让所有线程一起执行,也叫并发。
0 0
原创粉丝点击