中易网

JAVA 中,thread的run()和start()方法到底有什么区别?把我搞糊涂了。

答案:6  悬赏:80  
解决时间 2021-01-19 08:10
  • 提问者网友:了了无期
  • 2021-01-18 14:46
JAVA 中,thread的run()和start()方法到底有什么区别?把我搞糊涂了。
最佳答案
  • 二级知识专家网友:逐風
  • 2021-01-18 16:16
1.start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码:
通过调用Thread类的start()方法来启动一个线程,
这时此线程是处于就绪状态,
并没有运行。
然后通过此Thread类调用方法run()来完成其运行操作的,
这里方法run()称为线程体,
它包含了要执行的这个线程的内容,
Run方法运行结束,
此线程终止,
而CPU再运行其它线程,

2.run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码:

而如果直接用Run方法,
这只是调用一个方法而已,
程序中依然只有主线程--这一个线程,
其程序执行路径还是只有一条,
这样就没有达到写线程的目的。

举例说明一下:
记住:线程就是为了更好地利用CPU,
提高程序运行速率的!

public class TestThread1{
public static void main(String[] args){
Runner1 r=new Runner1();
//r.run();//这是方法调用,而不是开启一个线程
Thread t=new Thread(r);//调用了Thread(Runnable target)方法。且父类对象变量指向子类对象。
t.start();

for(int i=0;i<100;i++){
System.out.println("进入Main Thread运行状态");
System.out.println(i);
}
}
}
class Runner1 implements Runnable{ //实现了这个接口,jdk就知道这个类是一个线程
public void run(){

for(int i=0;i<100;i++){
System.out.println("进入Runner1运行状态");
System.out.println(i);
}
}
}
全部回答
  • 1楼网友:胯下狙击手
  • 2021-01-18 22:05
学习一下
  • 2楼网友:鱼芗
  • 2021-01-18 21:18
你要写线程的话需要继承Thread 类 而run()方法就是 Thread的方法 你需要对其重写,而start()方法呢就是需要你的线程实例来调用 其作用呢就是启动当前实例的线程也就是说运行run()方法 懂么~追问那到底要不要用到run方法追答.....你不写run方法线程有什么意义啊 别先可字面意义来了 去找个线程的demo 或者先试着写写了解下 线程很复杂的 ~追问我试过demo了,有时候,感觉start()方法和run()方法没有什么区别,搞糊涂了。追答......................那是2个概念 刚刚学东西不要这么武断 觉得是对的就是对的 你了解过线程的状态么你知道线程是如何进行的么 ....... 你要一点一点来 run()方法是一个过程你可以理解为你写的那根线程的动作 而start()方法不过是启动这根线程的方法 他们俩个怎么能让你弄混追问嗯,一点一点的来吧,主要是初学,没有做过真正的项目,不知道线程的实际应用是用来完成什么样的功能?所以理解起来一头雾水。追答慢慢来吧 用到了自然就理解 了不过话说回来 线程还是很常用的 多线程也很恶心的 慢慢来 run()方法是一个过程你可以理解为你写的那根线程的动作 而start()方法不过是启动这根线程的方法,你先这么理解就成了
  • 3楼网友:从此江山别
  • 2021-01-18 19:42
run是被其他调用的
  • 4楼网友:轻熟杀无赦
  • 2021-01-18 18:26
调用thread.start()方法时,会调用run()方法。
  • 5楼网友:長槍戰八方
  • 2021-01-18 17:05
run()是你线程运行之后执行的内容,start()是让你写的那个线程去排队
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息