`
兩ting
  • 浏览: 78088 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

Thread线程的run和start区别

阅读更多

 Thread的start和run

1) start:

用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到spu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。

2) run:

run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。

举例说明一下:

记住:线程就是为了更好地利用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);
}
}
}

同时摘取一段外文网站论坛上的解释:
Why do we need start() method in Thread class? In Java API description for Thread class is written : "Java Virtual Machine calls the run method of this thread..".

Couldn't we call method run() ourselves, without doing double call: first we call start() method which calls run() method? What is a meaning to do things such complicate?

 

 

There is some very small but important difference between using start() and run() methods. Look at two examples below:

Example one:

Code:

Thread one = new Thread();
Thread two = new Thread();
one.run();
two.run();

Example two:

Code:

Thread one = new Thread();
Thread two = new Thread();
one.start();
two.start();

The result of running examples will be different.

In Example one the threads will run sequentially: first, thread number one runs, when it exits the thread number two starts.

In Example two both threads start and run simultaneously.

Conclusion: the start() method call run() method asynchronously (does not wait for any result, just fire up an action), while we run run() method synchronously - we wait when it quits and only then we can run the next line of our code.

 

http://blog.csdn.net/tornado886/archive/2009/09/06/4524346.aspx

 

 

Thread对象的run()方法在一种循环下,使线程一直运行,直到不满足条件为止,在你的main()里创建并运行了一些线程,调用Thread类的start()方法将为线程执行特殊的初始化的过程,来配置线程,然后由线程执行机制调用run()。如果你不调用start()线程就不会启动。

 

 

因为线程调度机制的行为是不确定的,所以每次运行该程序都会有不同的结果,你可以把你的循环次数增多些,然后看看执行的结果,你会发现main()的线程和Thread1是交替运行的。
4.还有就是尽管线程的调度顺序是不固定的,但是如果有很多线程被阻塞等待运行,调度程序将会让优先级高的线程先执行,而优先级低的线程执行的频率会低一些。

 

 

线程的启动是比较复杂的,需要为线程分配资源,它的START方法被调用时系统才会为线程分配资源。
你上面调用线程的run方法只能算普通的方法调用一样,得运行完run里面的代码整个程序才能往下进行,而如果调用start方法,线程和MAIN方法就会抢资源,打印的语句会交替出现,你把线程里的循环次数加到300,试一下依次调run、start和两次都调start方法时所出现的情况应该能看出点端倪~~~

分享到:
评论

相关推荐

    Java多线程——Thread类中run()方法和start()方法的区别.docx

    在Java多线程编程中,`Thread` 类的 `run()` 方法和 `start()` 方法扮演着不同的角色,它们之间的区别是理解并发执行的关键。 首先,`start()` 方法是真正启动新线程的方法。当你调用 `Thread` 对象的 `start()` ...

    java中thread线程start和run的区别

    `Thread`类是Java中用于创建和管理线程的核心类,而`start()`和`run()`方法是与线程执行密切相关的方法,它们之间存在显著的区别。 首先,`run()`方法是`Runnable`接口或`Thread`类中的一个成员方法。当你需要创建...

    QT线程start()和run()

    通过理解`start()`和`run()`的方法以及如何正确地使用它们,可以有效地利用多线程提高程序的性能和响应性。同时,还需要注意到线程的生命周期管理,特别是如何安全地结束线程,以避免资源泄露或其他潜在的问题。

    Java中Thread.start()和Thread.run()的区别.docx

    在Java编程语言中,理解和掌握线程的使用是至关重要的,特别是`Thread.start()`和`Thread.run()`这两个方法。它们在多线程编程中扮演着关键角色,但有着明显的区别。 首先,`Thread.start()`方法的主要作用是启动一...

    java线程中start和run的区别详解

    Java线程中start和run的区别详解 在Java编程中,线程是一个基础概念,start和run是两个常用的方法,但是它们之间的区别却经常被忽视。本文将详细介绍Java线程中start和run的区别,通过示例代码帮助大家更好地理解这...

    Android:Handler的post()方法和Thread的start()方法执行Thread的run()方法的区别

    * 此时只会会执行Run()方法,但是不会开启新的线程 */ //Handler h = new Handler(); //h.post(r); /* * 在java中真正开启线程的方法是这样的。 */ Thread t = new Thread(r); t.start(); ...

    Thread实现多线程

    继承Thread类: 1必须重写run 方法:里面放置的实际的线程体 2 启动线程: 3创建Thread对象 4调用Thread对象的start 方法启动线程

    Java Thread 的 run() 与 start() 的区别.docx

    Java线程中的`run()`和`start()`方法是线程编程中的关键概念,它们之间有着显著的区别。首先,我们来看一下这两个方法的基本解释。 1. `start()`方法:`start()`是真正启动线程的关键,它使得线程进入就绪(可运行...

    java的thread类重写run方法的双线程从1加到100

    在Java编程语言中,多线程是并发...在这个练习中,我们学习了如何通过继承`Thread`、重写`run`方法以及启动线程来实现从1到100的累加。这只是一个基础的示例,实际的多线程编程会涉及到更复杂的并发控制和同步策略。

    thread 线程类 实现runnable接口

    Thread 类提供了 start() 方法来启动线程,run() 方法来执行线程的执行体。线程可以通过 join() 方法等待线程的退出。 5. 线程的优先级 Thread 类提供了 setThreadPriority() 方法来设置线程的优先级,优先级范围...

    Thread中start()和run()的区别_动力节点Java学院整理

    start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。 run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动...

    QT多线程的实现方式:QThread run优雅的创建与退出QT多线程

    与标准C++库中的std::thread不同,QThread有自己的事件循环,使得线程可以处理信号和槽,这使得在QT环境中使用多线程更加方便和灵活。 二、QThread的创建 创建QThread对象时,通常会继承QThread并重写run()方法。...

    Java Thread中start()和run()的区别_动力节点Java学院整理

    在Java多线程编程中,理解`Thread`类的`start()`和`run()`方法的区别至关重要。这两个方法在实现线程并发执行时起到不同的作用。 首先,`start()`方法是用于启动一个新的线程。当你调用`start()`方法时,Java虚拟机...

    Thread类创建启用新线程

    本文将深入探讨如何使用`Thread`类来创建和启动新线程。 首先,让我们了解`Thread`类的基本结构。`Thread`类位于`java.lang`包中,它是所有线程的基类。创建新线程主要有两种方式: 1. 继承`Thread`类:创建一个新...

    java多线程thread实例

    在这个实例中,我们将深入探讨如何使用`Thread`类创建和管理多线程。 1. **线程的基本概念** - **线程**:线程是程序执行的最小单元,一个进程可以包含多个线程,它们共享同一内存空间,各自执行不同的任务。 - *...

    java基本教程之Thread中start()和run()的区别 java多线程教程

    在理解Thread类的start()和run()方法的区别时,我们需要深入探讨它们的工作原理。 首先,start()方法的主要作用是启动一个新的线程并执行该线程的run()方法。当调用start()时,Java虚拟机(JVM)会执行线程的初始化...

    Java Thread多线程全面解析

    Java Thread多线程全面解析涵盖了Java编程中关于线程的重要概念和实践技巧。在Java中,多线程是并发编程的基础,允许程序同时执行多个任务,提高系统资源利用率和应用程序的响应速度。 线程的生命周期包括五个基本...

    QT多线程moveToThread使用方式

    5. **启动线程**:最后,调用`QThread`的`start()`方法启动线程。线程启动后,之前移动的对象将在新线程中运行其所有后续操作。 6. **通信与同步**:在多线程环境中,线程间的通信和同步非常重要。QT提供了`signals...

    java thread start()和run()方法简析

    本文将深入探讨`start()` 和 `run()` 方法的区别及其在多线程环境中的作用。 1. **start() 方法** `start()` 方法是启动线程的关键。当你调用 `Thread` 对象的 `start()` 方法时,Java虚拟机(JVM)会执行以下几...

    Thread 线程 java编程 亲手测试了的

    在Java编程中,线程(Thread)是程序执行的基本单元,它允许程序同时执行多个任务。线程在多任务处理中扮演着至关重要的角色,尤其是在现代计算机系统中,多线程已经成为提高性能和效率的标准手段。`Thread`类是Java...

Global site tag (gtag.js) - Google Analytics