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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王睿 中级黑马   /  2012-3-17 16:08  /  2566 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本来ChePiao应该实现Runnable接口,我写错了继承了Thread类,没想到也能运行。

是不是因为Thread实现了Runnable所以继承他的类就也实现了Runnable接口呢???
  1. public class Text {

  2.         public static void main(String[] args) {
  3.                 ChePiao c1 = new ChePiao();
  4.                 Thread t1 = new Thread(c1);
  5.                 Thread t2 = new Thread(c1);
  6.                 Thread t3 = new Thread(c1);
  7.                 Thread t4 = new Thread(c1);       

  8.                 t1.start();
  9.                 t2.start();
  10.                 t3.start();
  11.                 t4.start();
  12.         }
  13. }


  14. class ChePiao extends Thread {
  15.         private int num = 100;
  16.        
  17.         @Override
  18.         public void run() {
  19.                 while(num>0){
  20.                         System.out.println(Thread.currentThread().getName()+"车票..."+ num--);
  21.                 }
  22.         }
  23.        
  24. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

4 个回复

倒序浏览

创建线程不就是这两种方法么
继承Thread类
和实现Runnable接口
你继承创建线程当然是没问题的啦
萌呆属性爆发了啊
回复 使用道具 举报
查看API,Thread类:
extends Object
implements Runnable
回复 使用道具 举报
本帖最后由 王亚男 于 2012-3-17 17:21 编辑

你这例子是挺有意思的。
ChePiao类本身就继承了Thread,而Thread本身也实现了Runnable接口。
而你这句:
ChePiao c1 = new ChePiao(); //已经创建了一个线程,本可以直接调用start
Thread t1 = new Thread(c1); //又创建一个线程,这句话调用的应该是Thread(Runnable target),而把c1当成了Runnable的算是子类对象吧,形成多态了吧。。起到了相同的作用,而且num也是唯一的,因为只建立了一个ChePiao类对象。不过建议你还是使用实现方式,毕竟单继承的局限性在那放着。
回复 使用道具 举报
应该是ChePiao c1 = new ChePiao();和Thread t1 = new Thread(c1);都行,这就建立了两个线程。一个c1一个t1。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马