3

我正在阅读 Java 中的多线程编程。在 java book 中,它说将任务与线程分离是一种首选设计。我不知道这是什么意思。

据我了解,最好使用实现 Runnable 而不是扩展线程。我只是不明白为什么会这样。

为什么实施比扩展更好?那么你什么时候使用扩展呢?

4

3 回答 3

4

软件设计中的一个重要原则是关注点分离:每个模块/对象/类/方法应该只有一个明确定义的职责。

Thread 类混合了两个问题:

  • 指定要执行的步骤序列(Runnable)

  • 与运行时系统交互以管理如何实现该序列的执行(在这种情况下通过专用 CPU 线程)

应用程序程序员不需要关心第二部分:她只需要写下她想要执行的代码路径,即实现一个 Runnable。

然后可以通过多种方式执行该 Runnable,例如通过启动一个新线程,也可以通过将其提供给 ExecutionService。当您将可运行文件硬编码到线程中时,这种灵活性就会消失。

于 2012-04-09T02:17:03.520 回答
3

的优点Runnable是您可以将 a 传递Runnable给构造函数以外的东西Thread。例如,您可以将它们与新的并发框架结合使用。

您可能扩展的一个原因Thread是您的任务是否需要直接访问Thread它正在运行的对象。

于 2012-04-09T02:10:37.113 回答
0

从逻辑上讲,IS-A 关系不应处理组合概念。

因此,当您想要创建自定义 Thread 时,扩展 Thread 类是“有用的”,这是所有超级方法的好处或覆盖某些方法 => 在这种情况下,对于 Thread 类,它在大多数情况下肯定是无用的。

此外,扩展 Thread 会阻止您扩展所需的业务类,例如,使用接口,您仍然可以从所需的类扩展。

我们总是想知道新类是需要一个概念还是这个概念。

You NEED Thread for Business class ,因此很可能将其与所有 Threading 概念分开 => 所以 Runnable 足以掩盖它。

于 2012-04-10T09:30:25.460 回答