您的位置:首页 > 编程语言 > Java开发

java多线程调用run和不调用run的区别

2016-05-25 17:42 399 查看
当在java程序中创建一个线程的时候,会三种情况:
1,只运行run方法
2,先执行start,再执行run方法
3,只运行start方法
三者的区别如下:

运行方式区别
只运行run只运行run的时候,多个线程的执行顺序是按代码顺序执行的,只不过执行的线程是当前线程,而不是你定义的线程,比如:你在main函数里面运行了定义了线程1、2、3。那么只调用1.run()、2.run()、3.run()的话,运行的线程实际上还是main线程的,和1、2、3没有关系,这个时候线程类就相当于普通类,调用run方法,就相当于调用了一个普通类的方法
先执行start,再运行run这时候,才具有线程调用的同步执行效果,执行任务的线程可能是当前线程、也可能是你定义的线程
只运行start这个时候会把任务的执行交给任务规划器,具体线程的执行需要等待系统去安排,任务执行的时间和顺序也是不确定的,但是这些任务肯定是你定义的线程运行的,而不像只运行run时候的现象,当前主动调用的线程不会参与这些任务的执行,例如像只运行run的情形,main不会定义线程里面的任务的
ps:附上我测试的代码,大家可以注释一部分,自己观看结果
class
OneThread
extends
Thread{
private
int
count
=5;
public
OneThread(String
name){

super();

this.setName(name
);
[align=left] }[/align]
[align=left] @Override[/align]
public
void
run(){

super.run();

while(count
>0){

count--;
System.
out.println("由"
+this.currentThread().getName()+
"计算. count="+count
);
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
public
class
ThreadExample {
public
static
void
main(String
args[]){
OneThread
a=
new
OneThread("A"
);
OneThread
b=
new
OneThread("B"
);
OneThread
c=
new
OneThread("C"
);
OneThread
d=
new
OneThread("D"
);
[align=left] a.start();[/align]
[align=left] b.start();[/align]
[align=left] c.start();[/align]
[align=left] d.start();[/align]
[align=left] a.run();[/align]
[align=left] b.run();[/align]
[align=left] c.run();[/align]
[align=left] d.run();[/align]
[align=left] [/align]
[align=left]}[/align]
[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: