`
44289533
  • 浏览: 65103 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java中thread的start()和run()的区别

阅读更多
java中thread的start()和run()的区别:

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);
}
}
}


同时摘取一段外文网站论坛上的解释:

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.

分享到:
评论

相关推荐

    java中thread线程start和run的区别

    主要介绍了java中thread线程start和run的区别,run()是Runnable接口中定义的一个方法,是为了让客户程序员在这个方法里写自己的功能代码的。直接调用和普通的类调用自己的成员方法是没有任何区别的

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

    start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。而run() : run()就和普通的...下面通过示例代码给大家介绍了Java Thread中start()和run()的区别,感兴趣的朋友一起看看吧

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

    通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到spu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行...

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

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

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

    本文以java中thread的start()和run()的区别做详细介绍, 需要了解跟多的朋友可以参考下

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

    * 在java中真正开启线程的方法是这样的。 */ Thread t = new Thread(r); t.start(); setContentView(R.layout.activity_main); System.out.println("Activity--&gt;"+ Thread.currentThread().getId()...

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

    通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行...

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

    Java是一种功能强大、可靠性高、跨平台的编程语言,适用于各种应用场景。它被广泛用于企业级应用开发、移动应用开发、云计算、大数据处理等领域,是一门值得学习和掌握的编程语言。

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

    主要介绍了Thread中start()和run()的区别,Thread类包含start()和run()方法,它们的区别是什么?下面将对此作出解答

    Java线程面试题大全.docx

    5. Thread 类中的 start () 和 run () 方法有什么区别? 6. Java 中 Runnable 和 Callable 有什么不同? 7. Java 中 CyclicBarrier 和 CountDownLatch 有什么不同? 8. Java 内存模型是什么? 9. Java 中的 volatile...

    【java面试题】综合性经典Java面试题

    Thread类的start()和run()方法的区别 start()方法会创建新的线程并启动该线程,所以该方法会调用其他native方法,而run()方法就是: 正常的Java方法调用,即在原来的线程中执行java代码。 Java中Runnable和...

    java试卷及答案

    9 Thread类中最重要的方法是 start 和 run 10 OutputStream类的功能是 接受要输出的字节并将它送往目的地 InputStream类的功能是 输入字节流 11 针对网络通信的不同层次 Java提供的网络功能有四大类:...

    java多线程示例

    Java中的多线程有三种实现方式: 1.继承Thread类,重写run方法。Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯一方法就是通过Thread类的start方法。 2.实现Runnable接口,并...

    基础深化和提高-Java多线程技术

    实现Runnable接口:创建一个类实现java.lang.Runnable接口,实现run()方法,并将该实现类传递给Thread类的构造函数中。然后创建Thread实例并启动线程。 java class MyRunnable implements Runnable { public void r

    Thread实现多线程

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

    JAVA并发编程实践-线程池-学习笔记

    当调用 start 启动线程时 Java 虚拟机会调 用该类的 run方法。 那么该类的 run() 方法中就是调用了 Runnable 对象的 run() 方法。 我 们可以继承重写Thread 类,在其 start 方法中添加不断循环调用传递过来的 ...

    java多线程机制 -- 源码详解

    当lefthand调用start()开始运行时,类Lefthand中的run()将自动被执行。 我们来分析一下上面程序的输出结果。Left线程首先开始执行,这时Lefthand类中的run方法开始执行,输出”I am a student”后,left主动“休息”...

    如何使用Java编写多线程程序

    在使用java创建线程的时候,你可以生成一个Thread类或者他的子类对象,并给这个对象发送start()消息(程序可以向任何一个派生自 Runnable 接口的类对象发送 start() 消息的),这样一来程序会一直执行,直到run返回...

    java 一手画方一手画圆 多线程

    import java.applet.*; import java.awt.*; import java.awt.event.*; public class fangyuan extends Applet implements Runnable { Thread left,right; Graphics mypen; int x,y,z,a,b,i; public void init() { ...

    创建线程的三种方式(Thread、Runnable、Callable).docx

    1. 在Java中负责实现线程功能的类是java.lang.Thread 类。 2. 可以通过创建 Thread的实例来创建新的线程。 3. 每个线程都是通过某个特定的Thread对象所对应的方法run( )来完成其操作的,方法run( )称为线程体。 4. ...

Global site tag (gtag.js) - Google Analytics