黑马程序员技术交流社区

标题: run();方法和start()方法 [打印本页]

作者: sd110572    时间: 2013-12-6 23:02
标题: run();方法和start()方法
有什么区别么?是不是都要调用Runnable接口的run()方法?
  1. class Runner implements Runnable{
  2.        
  3.         @Override
  4.         public void run() {
  5.                 System.out.println("Run begin");               
  6.         }
  7.        
  8. }

  9. public class TestStartAndRun {
  10.        
  11.         public static void main(String[] args) {
  12.                 Runner r = new Runner();
  13.                 Thread t = new Thread(r);
  14.                 r.run();   //这两个方法有什么区别?
  15.                 t.start(); //这两个方法有什么区别?

  16.         }

  17. }
复制代码

作者: 依然    时间: 2013-12-6 23:05
本帖最后由 依然 于 2013-12-6 23:07 编辑

r.run(); 方法只是调用run()方法而已,并没有开线程;
r.start();方法即调用了run()方法,也开启了新的一个线程;
作者: wangchao1686    时间: 2013-12-6 23:08
Thread类中run()和start()方法的区别如下:
run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;
作者: 王家胜    时间: 2013-12-7 04:18
public void run()如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
public void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。
start才是多线程启动线程的方法,run只是掉用run方法而已
  1. class Runner implements Runnable{
  2.            
  3.             @Override
  4.             public void run() {
  5.                     System.out.println(Thread.currentThread().getName());;               
  6.             }
  7.            
  8.     }

  9.     public class TestStartAndRun {
  10.            
  11.             public static void main(String[] args) {
  12.                     Runner r = new Runner();
  13.                     Thread t = new Thread(r);
  14.                     //r.run();   //这两个方法有什么区别?
  15.                     t.start(); //这两个方法有什么区别?

  16.             }

  17.     }
复制代码

输出Thread-0 可见创建了一个线程
  1.     class Runner implements Runnable{
  2.            
  3.             @Override
  4.             public void run() {
  5.                     System.out.println(Thread.currentThread().getName());;               
  6.             }
  7.            
  8.     }

  9.     public class TestStartAndRun {
  10.            
  11.             public static void main(String[] args) {
  12.                     Runner r = new Runner();
  13.                     Thread t = new Thread(r);
  14.                     r.run();   //这两个方法有什么区别?
  15.                     //t.start(); //这两个方法有什么区别?

  16.             }

  17.     }
复制代码

输出mian 可见线程是main线程而没有创建线程




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2