【问题标题】:Advantage of Thread over Runnable [duplicate]线程优于可运行的优势[重复]
【发布时间】:2012-08-14 18:55:13
【问题描述】:

可能重复:
Java: “implements Runnable” vs. “extends Thread”

1) 为什么Java语言同时提供Thread和Runnable? 2)线程优于可运行的优点是什么(为什么Java不能只提供可运行的) 3)我们可以做一个可运行的睡眠,给它一个id等吗?

【问题讨论】:

  • 这看起来很像家庭作业,在互联网上已经被回答了大约 10 万次。
  • @Darin:您提到的帖子中的所有答案都说明了为什么应该使用 runnable 以及它提供的优势。我的问题是为什么Java有Thread,Thread类比Runnable接口有什么优势?
  • 没有 Thread 类就不能启动线程。即使你有一个实现 Runnable 的类,你仍然需要实例化一个线程,或者使用 ExecutorService 来创建你的线程。
  • @Brian:这不是家庭作业,我没有找到可以对我的问题给出满意解释的答案。
  • @user892871 - 试试 Oracle 教程。 docs.oracle.com/javase/tutorial/essential/concurrency/…底部的段落简洁地解释了它。这真的归结为 Java 没有多重继承,因此除了在最简单的情况下您希望使用接口来获得灵活性。

标签: java multithreading


【解决方案1】:

1. Thread 是一个类,当你说.start() 时,你创建了一个thread of execution 附加到一个线程类的实例。@987654323调用Runnable的@方法使其执行任务到thread of executionstart()方法快速返回。

2. Runnable 是分配给newly created thread of executiontask

3. 所以没有 Thread 类,你不能运行你的 Runnable。

【讨论】:

    【解决方案2】:

    1) Thread 是一个类并且包含功能 - 而 runnable 是一个接口,因此只是实现类要遵守的“合同”。由于 Runnable 只是一个接口,您需要实例化一个线程来包含它。而线程已经包含产生线程的能力。

    2) 建议使用 Runnable 实现方式,因为如果您扩展 Thread,您将无法扩展其他任何东西(Java 不支持多重继承)。您可以在一个类上有多个接口,因此您可以拥有 Runnable + 许多其他接口,还可以扩展另一个基类

    3) 您从 Runnable 的实例化中获取线程并使其休眠 - this.sleep()

    【讨论】:

    • +1。在第 2 点,如果你扩展 Thread,你可能会无意中弄乱线程的核心功能。
    猜你喜欢
    • 2010-11-15
    • 2016-09-27
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2012-02-25
    • 2013-03-06
    相关资源
    最近更新 更多