将任务与线程分开是什么意思?

时间:2012-04-09 02:07:57

标签: java multithreading

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

据我所知,最好使用implements Runnable而不是扩展Threads。我只是不明白为什么会这样。

为什么实施更好然后扩展?你何时会使用延伸?

3 个答案:

答案 0 :(得分:4)

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

Thread类混合了两个问题:

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

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

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

然后可以通过多种方式执行Runnable,例如通过启动新的Thread,还可以将其提供给ExecutionService。当您将runnable硬编码为Thread时,这种灵活性就会消失。

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

逻辑上,IS-A关系不应该涉及组合的概念。

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

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

我们总是想知道新班级是否需要概念或是概念。

你需要Thread for Business类,所以很可能将它与所有Threading notion =>分开。所以Runnable足以掩盖它。