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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© DOOR 中级黑马   /  2013-12-30 21:06  /  1145 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 DOOR 于 2014-1-4 18:03 编辑

我这样做也可以实现四个窗口同时卖100张票啊,为什么要过渡到Runnable接口?这样做到底有什么不妥的地方,求解。。。。是不是因为,Thread本类对象已经在主线程中实现了开启线程动作,所以就不再需要Ticket去做他的子类?
Runnable出现的意义只是为了帮Thread本类对象去装start()后的run()方法?

  1. class Ticket extends Thread// implements Runnable
  2. {
  3.         private int t=100;
  4.         
  5.         public void run()
  6.         {
  7.                 while(true)
  8.                 {
  9.                         if (t>0)
  10.                         System.out.println(Thread.currentThread().getName()+"出票号码------"+t--);
  11.                 }
  12.         }
  13. }


  14. class Hello
  15. {
  16.         public static void main(String[] arg)
  17.         {
  18.                 Ticket t = new Ticket();
  19.                 Thread t1 = new Thread(t);
  20.                 Thread t2 = new Thread(t);
  21.                 Thread t3 = new Thread(t);
  22.                 Thread t4 = new Thread(t);
  23.                 //Ticket t2 = new Ticket();
  24.                 //Ticket t3 = new Ticket();
  25.                 //Ticket t4 = new Ticket();
  26.                  t1.start();
  27.                  t2.start();
  28.                  t3.start();
  29.                  t4.start();
  30.         }
  31. }
复制代码





评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

7 个回复

倒序浏览
其实,你这样做可以的原因是因为Thread 本身实现了Runnable接口,也就是你本来可以直接实现这个接口,就具备可运行的功能,还还去专门认了个爹,因为他实现了,你去继承他的功能。这是没有必要的。

这里涉及到接口和父类子类继承的问题。。接口等于是扩展功能,ticket 属于火车票。。如果非要继承的话,感觉继承一个叫“票”的类做爹比较合适。。。。毕竟,爹只能有一个。而接口可以很多。。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 DOOR 于 2013-12-30 22:02 编辑
布鲁Go 发表于 2013-12-30 21:29
其实,你这样做可以的原因是因为Thread 本身实现了Runnable接口,也就是你本来可以直接实现这个接口,就具 ...

没错,Tread类实现了Runnable,怪我没仔细看文档,谢谢你
回复 使用道具 举报
Thread是类,Runnable是接口,java里子类继承父类是单继承的,但却可以实现多个接口。当你确定你不再需要继承其他类的时候,你完全可以用Thread.但如果你还要继承其他类的话,那你说你会用什么呢?一句话:继承了Thread类就不能继承其他的类,接口就没这个限制

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
776699 发表于 2013-12-30 21:33
Thread是类,Runnable是接口,java里子类继承父类是单继承的,但却可以实现多个接口。当你确定你不再需要继 ...

那是不是可以认为Runnable接口就是起到一个管道的作用,用来给Thread类和实现Runnable接口的子类做桥接?
回复 使用道具 举报
第一种创建线程方式属于鸡肋方式,只是用来引出第二种方式的。自言自语一下
回复 使用道具 举报
{:soso_e100:}{:soso_e101:}{:soso_e100:}{:soso_e145:}
回复 使用道具 举报
Thread是个类,如果你继承了这个类就不能继承别的类了,这是java单继承的特性,而Runnable接口可以解决这个问题,实现了Runnable接口还可以继承别的类,单单只是为了建立多线程的话实现Runnable接口就可以了

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

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