`
尘枉_yjava
  • 浏览: 71558 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

启动一个线程是用run()还是start()? 为什么?

    博客分类:
  • java
 
阅读更多
启动线程肯定要用start()方法。当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。当cpu分配给它时间时,才开始执行run()方法(如果有的话)。start()是方法,它调用run()方法.而run()方法是你必须重写的. run()方法中包含的是线程的主体。
继承Thread类的启动方式:
public class ThreadStartTest {
    public static void main(String[] args) {
        ThreadTest tt = new ThreadTest();// 创建一个线程实例
         tt.start();  // 启动线程
    }
}
实现Runnable接口的启动方式:
public class RunnableStartTest {
    public static void main(String[] args) {
       Thread t = new Thread(new RunnableTest());    // 创建一个线程实例
        t.start();  // 启动线程
    }
}
实际上这两种启动线程的方式原理是一样的。首先都是调用本地方法启动一个线程,其次是在这个线程里执行目标对象的run()方法。那么这个目标对象是什么呢?为了弄明白这个问题,我们来看看Thread类的run()方法的实现:
public void run() {
    if (target != null) {
        target.run();
    }
}
当我们采用实现Runnable接口的方式来实现线程的情况下,在调用new Thread(Runnable target)构造器时,将实现Runnable接口的类的实例设置成了线程要执行的主体所属的目标对象target,当线程启动时,这个实例的 run()方法就被执行了。当我们采用继承Thread的方式实现线程时,线程的这个run()方法被重写了,所以当线程启动时,执行的是这个对象自身的 run()方法。总结起来就一句话,如果我们采用的是继承Thread类的方式,那么这个target就是线程对象自身,如果我们采用的是实现Runnable接口的方式,那么这个target就是实现了Runnable接口的类的实例。
分享到:
评论

相关推荐

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

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

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

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

    Java中启动线程start和run的两种方法

    start()方法它的作用是启动一个新线程,run()就和普通的成员方法一样,可以被重复调用。接下来通过本文给大家分享Java中启动线程start和run的两种方法,需要的朋友参考下吧

    Java线程面试题大全.docx

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

    java中thread线程start和run的区别

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

    多线程 打印1-99,100-199

    1. 实现一个类ThreadMock(模拟线程),用来模仿Thread类,该类具有以下特征: a) Public class ThreadMock implents Runnable {},Runnable 是Java定义的接口 b) ThreadMock类与个公有的方法start,用来启动模拟...

    java多线程示例

    Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯一方法就是通过Thread类的start方法。 2.实现Runnable接口,并实现该接口的run()方法.创建一个Thread对象,用实现的Runnable接口...

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

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

    QT线程start()和run()

    线程之间共享数据,但又单独执行,QT线程QThread是平台无关的。通常主线程从main开始执行,而在主线程中创建其他线程,其他线程派生于QThread。

    java用线程两种方式

    * 分别使用Runnable接口和Thread类编程实 编写一应用程序创建两个线程一个线程打印输出1—1000之间所有的奇数(Odd Number) * 另外一个线程打印输出1-1000之间所有的偶数(Even Number)要求两个线程随机休眠一 段...

    CoreJava面试题汇总.html

    为什么这么用? 2 静态变量和成员变量的区别 3 filter过滤器用过么,一般用在什么地方? 4 多线程一般用在什么地方? 5 list用过哪些?ArrayList如何排序?list跟set的区别? 6 异常包括什么?说一下运行时异常?...

    Java程序员面试宝典 PDF 参考资料.rar

    Java程序员面试宝典 pdf,内容涉及String、Servlet、int 和 Integer的区别、、String 和...启动一个线程是用run()还是start()?等,都是些比较实用的Java基础操作知识,对Java不熟悉的朋友应该是不错的面试必备知识。

    JAVA面试题 start()和run()详解

    主要介绍了JAVA面试题 启动线程是start()还是run()?为什么?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Qt 多线程访问同一个变量

    1.Qt下,多线程使用互斥锁安全访问同一全局变量;2.源码中定义了ThreadA和ThreadB,定义变量后,依次调用函数start()来启动重写的run()函数

    Handler与Android多线程详解

    下面是一段大家都比较熟悉的代码: 代码如下:Handler ...上述代码中的handler并没有调用线程myThread的start()方法,而是直接调用了run()方法,这也就意味着实际上并没有创建一个新的线程,只是在当前线程中调用run()

    Thread实现多线程

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

    一个简单的发送线程与接收线程实例

    } public void run() { for(int i=1;i;i++) { bf.put(i); System.out.println("sender put:"+i); try { sleep(1); } catch(InterruptedException e) { System.out.println(e.getMessage()); } } } public...

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

    继承Thread类实现多线程: 1. 在Java中负责实现线程功能的类是java.lang.Thread 类。 2. 可以通过创建 Thread的...4. 通过调用Thread类的start()方法来启动一个线程(只是将线程由新生态转为就绪态,而不是运行态)。

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

    主要介绍了java线程中start和run的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

    Java多线程技术允许程序同时执行多个线程,每个线程执行一个独立的任务。这种并发性能够提高程序的性能和资源利用率,使得程序能够同时处理多个任务,从而提高响应速度和吞吐量。 在Java中,实现多线程有几种方式:...

Global site tag (gtag.js) - Google Analytics