黑马程序员技术交流社区

标题: java中多线程问题? [打印本页]

作者: sbeeqnui1987    时间: 2012-6-16 22:21
标题: java中多线程问题?
本帖最后由 sbeeqnui1987 于 2012-6-19 21:41 编辑

java接口不是一个只有方法名没有方法体的空壳吗?那为什么实现了Runnable接口的类就有了多线程功能呢?
作者: 李元峰    时间: 2012-6-16 22:32
接口 是描述了类的一组需求,但是接口并不是只有 方法申明而已,还可以有 成员变量 比如 public static final
  变量必须是 public static final 为什么么?
因为java不像c++ ,C++ 可以多继承,但是多继承会但来很麻烦的问题 ,比如说 一个类继承了多个父类,而这些父类之间的变量名可能会重复,
所有java 实现的是     单继承 !为此 变量必须用 public static final 申明,他不属于任何对象,而是属于整个类,多以就避免了重名和混淆,接口中也可以有定义完整的方法体 并不是说只有方法的申明而已

楼主应该 研究先 普通类 抽象类,接口之间的差异
我的总结如下:

Java 中的抽象类 是用 abstract 关键字修饰的  抽象类是这样的 :
1 用abstract 关键字修饰 拥有 用abstract修饰的方法
2 他不能被实例化,必须被继承,抽象方法必须被重写,
3.抽象方法只需声明,无需继承!

抽象类 也可以有成员变量,也可以有定义的完整方法!



Java中的 接口 是特殊的抽象类
成员变量 必须是  public static final
方法 必须是      public abstract

作者: 李元峰    时间: 2012-6-16 22:34
实现了Runnable接口的 然后用该类 来实例化一个Thread 对象是jvm 多线程机制,
实现接口 就必须实现这个接口提供的所有方法,这是java 语法多规定的!
作者: 龙秋地    时间: 2012-6-16 22:35
因为Runnable接口中有一个run()方法,实现了Runnable接口的类必须复写run()方法.
run()方法的作用是:
使用实现接口 Runnable 的对象创建一个线程时,
启动该线程将导致在独立执行的线程中调用对象的 run 方法.
所以就有多进程功能了.
作者: 胡卿    时间: 2012-6-16 22:48
① class A extends Thread {public void run() {}}//这是继承
     main() {new A().start();}
② class A implements Runnable {public void run() {}}//这是实现接口
     main() {new Thread(new A()).start();}
注意看②里面的new Thread,你说的对,单独A实现了Runnable是没有多线程的功能的,必须new Thread创建线程,然后将A的实例作为参数产给它,这样和Thread合起来才实现了线程的功能。
这两种方法是面向对象的两种设计思想的体现,即继承和组合,①是继承,将Thread继承过来,加上A自己的东西(run方法)构成完整的线程,②是组合,将Thread和A组合起来,构成线程。

线程的创建方法:
  1 继承Thread类。
          a,定义类继承Thread类。
          b,覆盖Thread类中的run方法,将需要被多线程执行的代码定义到该run方法当中。
          c,建立Thread类的子类创建线程对象。
          d,调用start方法,开启线程并调用该线程的run方法。

  2 实现Runnable接口。
          a,定义类实现Runnable接口。
          b,覆盖Runnable接口中的run方法,将需要被多线程执行的代码定义到该run方法当中。
          c,通过Thread类创建线程对象。
          d,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
          e,调用Thread类的start方法,开启线程并调用Runnable接口子类对象的run方法。

    这两种方式的区别:
          1,实现Runnable接口是可以将资源共享。
          2,实现Runnable接口避免了单继承的局限性 。

所以建议使用实现Runnable接口的方式。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2