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

尹稳定

中级黑马

  • 黑马币:44

  • 帖子:46

  • 精华:0

© 尹稳定 中级黑马   /  2014-6-7 00:34  /  1443 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

继承Thread和Runnable两张方法中的run方法有什么不同?

10 个回复

倒序浏览
run有什么不同?你是要问这两种创建方式有什么不同?
回复 使用道具 举报 1 1
never615 发表于 2014-6-7 00:52
run有什么不同?你是要问这两种创建方式有什么不同?

额。。就是这两种方法有什么不同,哪种好一点
回复 使用道具 举报 1 0
实现Runnable接口的方式更好!比如你建了一个Student要继承Person,这时候你就不能继承Thread了,只能实现接口,所以一般都实现接口的,继承有局限性。

用起来继承Thread的方法是new 继承Thread的对象,然后直接调用start,见下面的例子

实现接口的方法,要new一个实现接口的对象,在传递给Thread,在调用start,下面也给了例子。


创建线程的两种方式:
创建线程的第一种方式:继承Thread类。步骤:
1,定义类继承Thread。
2,复写Thread类中的run方法。
        目的:将自定义代码存储在run方法。让线程运行。
3,调用线程的start方法,
        该方法两个作用:启动线程,调用run方法。

示例:

  1. class Demo extends Thread
  2. {
  3.     public void run()
  4.     {
  5.         for(int x=0; x<60; x++)
  6.             System.out.println("demo run----"+x);
  7.     }
  8. }
  9. class ThreadDemo
  10. {
  11.     public static void main(String[] args)
  12.     {
  13.         Demo d = new Demo();//创建好一个线程。
  14.         d.start();//开启线程并执行该线程的run方法。
  15.         //d.run();//仅仅是对象调用方法。而线程创建了,并没有运行。
  16.         
  17.         for(int x=0; x<60; x++)
  18.             System.out.println("Hello World!--"+x);
  19.    
  20.     }
  21. }
复制代码



创建线程的第二种方式:实现Runable接口

步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。
        将线程要运行的代码存放在该run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。 Thread(Runnable target)为什么要将Runnable接口的子类对象传递给Thread的构造函数。
        因为,自定义的run方法所属的对象是Runnable接口的子类对象。所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。
     (!!查API可知Runnable里面只有一个run方法,想要运行,就要被对象给Thread()让他在调用start()开启线程)
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
  1. class Ticket implements Runnable{
  2.     private int tick=100;
  3.     public void run() {
  4.         while(tick>0){
  5.             System.out.println(Thread.currentThread().getName()+"----sale:"+tick--);
  6.         }
  7.     }
  8. }
  9. public class TicketDemo {
  10.     public static void main(String[] args){
  11.         Ticket t=new Ticket();
  12.         Thread t1=new Thread(t,"窗口01");
  13.         Thread t2=new Thread(t,"窗口02");
  14.         Thread t3=new Thread(t,"窗口03");
  15.         Thread t4=new Thread(t,"窗口04");
  16.         t1.start();
  17.         t2.start();
  18.         t3.start();
  19.         t4.start();
  20.     }
  21. }
复制代码



回复 使用道具 举报 1 0
Thread类是Runnable接口的一个子类!继承Thread类实现的多线程有单线程限制,而实现Runnable接口的则不会有此限制!但是无论使用Thread类还是Runnable接口,都必须用Thread类的start()方法启动线程!    综上所述建议优先使用Runnable接口来实现多线程功能!
回复 使用道具 举报 1 0
never615 发表于 2014-6-7 01:54
实现Runnable接口的方式更好!比如你建了一个Student要继承Person,这时候你就不能继承Thread了,只能实现 ...

:victory:赞!
回复 使用道具 举报
继承了Thread就不能再继承别的类了,因为java只能单继承。所以建议使用Runnable比较好!
回复 使用道具 举报
run方法都是用于存储任务的!!
回复 使用道具 举报
继承Thread类或者实现Runnable接口.... 没什么不同完全一样实际上Thread类就是实现的Runnable了接口 只不过因为java的单独继承的机制所以Runnable接口用的会多一些
回复 使用道具 举报
会说话的木头 发表于 2014-6-7 12:51
继承Thread类或者实现Runnable接口.... 没什么不同完全一样实际上Thread类就是实现的Runnable了接口 只不过 ...

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