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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马林贺 中级黑马   /  2012-5-26 15:43  /  2890 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    在学完多线程后一点疑惑,多线程 如果不考虑 有其他类的继承,实现方式和继承方式,还有什么区别呢?
   
   还有就是实现方式,和继承方式在实际应用中,会有那些差别?  最好是能举个例子 说明下!

10 个回复

倒序浏览
求高人 举例说明一下  !
回复 使用道具 举报
  接口定义时,格式特点:
  1、接口中常见定义:常量,抽象方法。
  2、接口中的成员都有固定修饰符。
      常量:public static final
          方法:public abstract
记住:接口中的成员都是public的。

//继承的覆盖,针对函数
/*含义:保留父类的功能定义,并重写功能内容
回复 使用道具 举报
黑马11期李项京 发表于 2012-5-26 16:08
接口定义时,格式特点:
  1、接口中常见定义:常量,抽象方法。
  2、接口中的成员都有固定修饰符。

。。。。我想问的是多线程,继承 和实现接口 的问题。。
回复 使用道具 举报
区别:1、因为接口的方法都是抽象的,所以实现接口的时候,必须要覆盖接口的所有方法。而继承,相当程序的升级,只覆盖需要升级的方法即可。
2、接口满足不知道实现类的具体方法是什么内容的需求,提高程序的拓展性
回复 使用道具 举报
通过继承Thread类实现多线程。

缺点:Java程序只允许单一继承,即一个子类只能有一个父类,所以在java中如果一个类继承了某一个类,同时又想采用多线程技术的时,就不能用Thread类产生线程,因为java不允许多继承。同时用这种方式不能处理同一个资源。

通过实现Runnable接口实现多线程。

用Runnable接口的优势:

(1):适合多个相同程序代码的线程去处理统一资源的情况,把虚拟cpu(线程) 同程序的代码,数据有效分离,较好的体现了面向对象的设计思想.

(2):可以避免由于Java的单继承特性带来的局限.开发中经常碰到这样一种情况,即:当要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么就只能采用实现Runnable接口的方式了.

(3):增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的,当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代码.多个线程可以操作相同的数据,与它们的代码无关.当共享访问相同的对象时,即共享相同的数据.当线程被构造时,需要的代码和数据通过一个对象作为构造方法实参传递进去,这个对象就是一个实现了Runnable接口的类的实例.
回复 使用道具 举报
创建线程的第一种方式:继承Thread类
定义类继承thread
复写thread类中的run方法
调用线程的start方法。

创建线程的第二种方式:实现Runable接口
1.定义类实现Runnable接口
2.覆盖Runnable接口中的run方法
3.通过thread类建立线程对象
4.将runnable接口的子类对象作为实际参数传递给thread类的构造函数。
5.调用thread类的start方法开启线程
它有一个很大的弊端! 没有多继承。也就是说:如果一个类已经继承了某个类,便无法再继承Thread类
  1. class Demo implements Runnable         //继承方式extends Thread
  2. {
  3. private int ticket = 100;
  4. Object obj = new Object();
  5. public void run()     //重写run方法
  6. {
  7. while(true)
  8. {
  9. <SPAN class=kwd>        synchronized</SPAN><SPAN class=pun>(</SPAN><SPAN class=pln>obj</SPAN><SPAN class=pun>) </SPAN><SPAN class=pln> </SPAN><SPAN class=com>//同步加锁</SPAN>
  10.        {
  11.                if(ticket>0)
  12.                System.out.println(Thread.currentThread().getName()+" ..... "+ticket--);   //获取当前线程对象的名字并打印
  13.        }
  14. }

  15. }
  16. }

  17. class ThreadDemo
  18. {
  19. public static void main(String[] args)
  20. {

  21. /*
  22. 继承方式:
  23. Demo d = new Demo();
  24. Demo d1= new Demo();
  25. d.start();
  26. d1.start();
  27. */


  28. //实现方式
  29. Demo d = new Demo();
  30. Thread t1 = new Thread(d);
  31. Thread t2 = new Thread(d);
  32. Thread t3 = new Thread(d);
  33. Thread t4 = new Thread(d);
  34. t1.start();
  35. t2.start();
  36. t3.start();
  37. t4.start();



  38. }
  39. }

复制代码
回复 使用道具 举报
杨天皓 发表于 2012-5-26 17:06
创建线程的第一种方式:继承Thread类
定义类继承thread
复写thread类中的run方法

请教一下,你代码截图是用的什么工具?
回复 使用道具 举报
多线程的例子我QQ空间写了 参考一下443883861
回复 使用道具 举报
马林贺 发表于 2012-5-26 18:18
请教一下,你代码截图是用的什么工具?

你是说我回复帖子的时候添加的那个代码吗?、
在回复框这个工具栏这里有一个  <>  这个就是添加代码的
回复 使用道具 举报
隋丙跃 发表于 2012-5-26 19:11
多线程的例子我QQ空间写了 参考一下443883861

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