Thread类:run和start方法的区别

原创 2018年04月16日 10:52:48

run和start方法,有时候会被当成起一个新的线程执行代码逻辑,来达到程序异步执行的效果。

(1)程序调用run方法:

public class ExtendThread extends Thread{


@Override
public void run() {
// TODO Auto-generated method stub
try {
//打印出线程数
System.out.println("run方法打印线程数:"+Thread.currentThread().activeCount());
Thread.sleep(2000);
System.out.println("ExtendThread run over");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args) {
ExtendThread thread = new ExtendThread();
thread.run();//调用run方法
//thread.start();//调用start方法
//打印出线程数
System.out.println("main方法打印线程数:"+Thread.currentThread().activeCount());
}

}

运行结果:

run方法打印线程数:1

ExtendThread run over

main方法打印线程数:1

结论: 1.调用run方法,不会起新的线程;

           2.程序模块同步执行,先执行ExtendThread的run方法,再输出主程序main方法的打印信息。

(2)程序改调用start方法

public class ExtendThread extends Thread{


@Override
public void run() {
// TODO Auto-generated method stub
try {
//打印出线程数
System.out.println("run方法打印线程数:"+Thread.currentThread().activeCount());
Thread.sleep(2000);
System.out.println("ExtendThread run over");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args) {
ExtendThread thread = new ExtendThread();
//thread.run();//调用run方法
thread.start();//调用start方法
//打印出线程数
System.out.println("main方法打印线程数:"+Thread.currentThread().activeCount());
}

}

运行结果:

main方法打印线程数:2
run方法打印线程数:2

ExtendThread run over

结论: 1.调用start方法,会起新的线程;

           2.程序模块异步执行,同时执行ExtendThread的run方法,和输出主程序main方法的打印信息。


(3)其实,从start源码方法注释可以得出以下三点结论:

        1.main方法调用start方法,会让java虚拟机调用run方法。

        2.start的执行结果,是会有两个在跑的线程,意思就是会新启动一个线程

        3.start方法不能连续调用多次,否则会报java.lang.IllegalThreadStateException异常。

        而调用run方法,则只是调用重写的run方法,不会重启线程

       /**
     * Causes this thread to begin execution; the Java Virtual Machine
     * calls the <code>run</code> method of this thread.
     * <p>
     * The result is that two threads are running concurrently: the
     * current thread (which returns from the call to the
     * <code>start</code> method) and the other thread (which executes its
     * <code>run</code> method).
     * <p>
     * It is never legal to start a thread more than once.
     * In particular, a thread may not be restarted once it has completed
     * execution.
     *
     * @exception  IllegalThreadStateException  if the thread was already
     *               started.
     * @see        #run()
     * @see        #stop()
     */

    public synchronized void start(){

        /** 略**/

    }

Web 前端工程师课程 第2周 (new)

-
  • 1970年01月01日 08:00

Thread线程中start()和run()方法的区别

start()和run()区别 start():用来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程...
  • codershamo
  • codershamo
  • 2016-07-12 10:01:47
  • 1441

Python中Thread类的start()和run()方法的区别

这两个方法都能开始线程活动,但是用法不同,其区别与Java Thread类中start()和run()的区别类似。 先来看官方文档的说明:...
  • chenpkai
  • chenpkai
  • 2017-04-29 09:25:12
  • 7406

线程run方法和start方法的区别

区别 run() 只是一个普通的方法调用,不会开启新的线程。 start() 会开启新的线程,分配新的资源。里面的变量互不影响。 实例 package multithr...
  • zengmingen
  • zengmingen
  • 2016-11-18 15:16:18
  • 2448

java再复习——多线程之初识线程,并从源码角度分析start与run方法,Thread类与Runnable接口

进程与线程的概念。 进程:是操作系统为一个程序分配内存空间的基本单位。 线程:存在于一个进程里,是程序执行的基本单元。线程才是负责是去执行程序的。 java创建线程的方式: 一:继承T...
  • sinat_31311947
  • sinat_31311947
  • 2017-03-05 15:11:52
  • 720

Thread直接调用run()和start()方法的区别

Thread类中run()和start()方法的区别如下:         run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;         start()...
  • chlhp
  • chlhp
  • 2011-08-06 22:47:08
  • 7013

Thread继承类中的run()方法和start()方法的区别

/* * To change this license header, choose License Headers in Project Properties. * To change this...
  • Deep_Mind
  • Deep_Mind
  • 2016-08-29 21:27:43
  • 1726

线程中start方法与run方法的区别-java教程

线程中start方法与run方法的区别-java教程 在线程中,如果start方法依次调用run方法,为什么我们会选择去调用start方法?或者在java线程中调用start方法与run方法...
  • u010953266
  • u010953266
  • 2015-06-18 12:24:15
  • 4967

线程与进程,Thread的run()与start()的区别

from:http://289972458.iteye.com/blog/1325189 对于线程,进程的概念一直都是比较模糊,最近整理了一下。总结起来就是,线程是进程的一部分,进程是程...
  • u014025369
  • u014025369
  • 2014-04-30 23:15:12
  • 2086

Thread类run()方法和start()方法区别

run()方法是Runnable接口的一个方法,可以多次重复实现调用;      start()方法是Thread的一个线程启动方法,一个线程不能重复启动,顾线程未结束时只能调用一次; packa...
  • u013742253
  • u013742253
  • 2014-03-14 22:40:25
  • 430
收藏助手
不良信息举报
您举报文章:Thread类:run和start方法的区别
举报原因:
原因补充:

(最多只允许输入30个字)