A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sd110572 金牌黑马   /  2013-12-6 23:02  /  954 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有什么区别么?是不是都要调用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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 依然 于 2013-12-6 23:07 编辑

r.run(); 方法只是调用run()方法而已,并没有开线程;
r.start();方法即调用了run()方法,也开启了新的一个线程;

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
Thread类中run()和start()方法的区别如下:
run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;

评分

参与人数 1黑马币 +3 收起 理由
简★零度 + 3

查看全部评分

回复 使用道具 举报
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线程而没有创建线程

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马